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

Posted guoguo001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了equals和==区别 ,equals和hashcode区别相关的知识,希望对你有一定的参考价值。

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

“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

 

以上是关于equals和==区别 ,equals和hashcode区别的主要内容,如果未能解决你的问题,请参考以下文章

关于equals()和==区别

equals和==的区别

equals()和==到底有啥区别啊?

[转]Java中==和equals的区别,equals和hashCode的区别

equals和==的区别是啥?

hashcode()和equals()的区别