- 两个对象是否相等的含义
“==”和equals()都属于对象的关系运算中的比较相等。那么判断一个类的两个对象是否相等有什么含义呢?
有两层含义:
①判断它们是否引用同一个实例;
②当两个对象分别引用同一个实例时,判断它们的实例值是否相等。一般情况下,两个实例值相等,是指它们的各成员变量值分别对应相等。
- 图解
类(引用数据类型)使用==、!=运算符比较两个对象是否引用同一个实例。一个类的equals方法用于比较该类的两个对象是否相等,包括引用同一个实例和分别引用两个实例两种情况,==关系运算和equals()方法的含义如下:
(a) i和j都是基本数据类型变量,i==j比较两变量值是否相等,不比较地址;
(b) 将d1对象赋值给d2对象,两个对象引用同一个实例,d1==d2 ? true,d1.equals(d2)返回true;
(c) d2引用由d1拷贝构造的实例,d1==d2 ? false,d1.equals(d2)返回true;
记住,字符串的比较基本上都是使用equals方法。
如果一个类梅雨自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法发实现代码如下:
boolean equals(Object o){
return this==o;
}
这说明,如果一个类没有自己定义equals方法,它默认从Object类继承的equals方法就是使用==操作符,也是在比较两个变量指向的对象是否是同一个对象,这时候使用equals和==是同样的结果,如果比较的是两个独立的对象则总返回false。
另外,对象运算符instanceof判断一个对象所引用的实例是否属于指定类,运算结果为boolean型。例如:
Person p=new Person();
d instanceof Person //结果是true,p是Person类的实例。