==与equals
转载出自 https://www.fangzhipeng.com/javainterview/2019/02/23/equals-hashcode.html
1、==
1、如果是八大基本数据类型,比较的是值;
2、如果是引用类型,比较的是地址。如果返回true,则这两个是同一个对象。
2、equals
通常来说equals比较的是地址:
public boolean equals(Object obj){
return (this == obj);
}
但是在String、Double等封装类中,重写了equals方法。
这里要引出hashCode方法:
通常的hashCode方法是native本地方法,返回对象的地址值:
public native int hashCode();
以String为例,重写了hashCode方法:
public int hashCode() {
int h = hash;
if (h == 0) {
char val[] = value;
int len = count;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
3、hashCode与equals的关系:
1、如果equals比较两个对象相同,那么这两个对象的hashCode一定相同;
2、如果两个对象的hashCode相同,这两个对象的equals值不一定相同。(除非重写hashCode方法,原因是为了保证同一个对象在equals方法相同的情况下hashCode也相同,如果重写的equals方法就要同时重写hashCode方法)