equals和==区别 ,equals和hashcode区别

时间:2020-12-10 16:47:33

“==” :      所比较的是基本数据类型,引用变量是否相等。

“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