==用于判断前后对象的地址是否相同,常用于比较引用是否指向相同对象。在预编译过程有如下要求:
1. 相同类型的引用可以比较
2. 不同类型的引用要进行比较。其中一个的类型必须派生自另一个,否则编译报错。
equal / equals 用于判断前后对象的值是否相同,即地址储存的内容是否相同。
如
-
String string = null;
-
String string2 = null;
-
则 string==string2;
-
-
string = new string();
-
string2 = new string();
-
则string!=string2 && string equal string2
在实际情况中的equals不一定满足实际需求,Java中提供了重写的方案,但需要满足原则如下:
-
public boolean equals(Object object){//修饰符和参数类型限定为boolean,Object
-
if (this == object) {
-
return true;//自反性,传递性,对称性需要满足
-
}
-
if (object == null) {
-
return false;//规定,用null检查之恒等于false
-
}
-
if (!(object instanceof <class-name> )) {
-
return false;//强制转换错误
-
}
-
if (the Condition you want) {//自定义,重写
-
return true;
-
} else {
-
return false;
-
}
-
}
重写equals方法后需要重写hashCode方法,保证自定义为相等的两个对象其哈希码相同。
即若通过了equals方法的测试,那么必须同样通过HashCode的方法测试。
-
public int hashCode(){
-
//equals方法多于成员变量有关
-
//通常的方法是将成员变量与某一素数相乘,使哈希码能够满足要求且随机分布。
-
return ....;
-
}
阅读(633) | 评论(0) | 转发(0) |