码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-04-01 10:40:44      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:==   boolean   ash   相等   hello   比较   不同类   字符串   否则   

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

“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区别

标签:==   boolean   ash   相等   hello   比较   不同类   字符串   否则   

原文地址:https://www.cnblogs.com/guoguo001/p/8685199.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!