“==” : 所比较的是基本数据类型,引用变量是否相等。
“equals”:两个独立对象的内容是否相等。例如字符串的比较用equals
String a = new String("hello");
String b = new String("hello");
所以a和b的“==”返回的是false , 而equals是true;
2.equals相等,则hashcode一定相等,即有相等的对象,则必有相等的哈希码,否则不一定成立。
例如:在不同类的时候,创建不同的对象,但有相同的值,equals方法覆盖时,hashcode方法需要重写保持
一致,所以有相同的hashcode值,但equals是不同的,不同类的实例对象是不同的。
class C{
String ssc = new String("AAAA");
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((ssc == null) ? 0 : ssc.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
C other = (C) obj;
if (ssc == null) {
if (other.ssc != null)
return false;
} else if (!ssc.equals(other.ssc))
return false;
return true;
}
}
class D{
String ssd = new String("AAAA");
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((ssd == null) ? 0 : ssd.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
D other = (D) obj;
if (ssd == null) {
if (other.ssd != null)
return false;
} else if (!ssd.equals(other.ssd))
return false;
return true;
}
}
public class EqualsAndHashCode {
public static void main(String[] args) {
//不同类比较
C c = new C();
D d = new D();
System.out.println("hashcode:"+(c.hashCode() == d.hashCode()));
System.out.println("equals:"+c.equals(d));
}
结果:
hashcode:true
equals:false
原文地址:https://www.cnblogs.com/guoguo001/p/8685199.html