您的位置:首页 > 编程语言 > Java开发

关于hashcode(),equals()和==的区别

2018-02-02 22:52 337 查看

hashcode(),equals()和==的区别

1、 所有的对象都继承object,自带的equal就是==

public boolean equals(Object obj) {
return (this == obj);


不过string这个类是个例外,它会比较每个字符是否相等

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}


看看string中的hashcode()是怎么实现的

public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}


可以发现这个hashcode值是跟其内容相关的

2、 equals()相同hashcode()也要相同,hashcode相同equals不一定相同

3、一个对象的equals方法被重写时hashcode方法也要重写

因为hashcode是用在存放数据时使用的一个标记值,比如set是不能存放相同元素的,会根据hashcode判断数据存放的位置,如果这个位置有元素了,但是仍不能判断这个两个元素是否相同,还要判断equals是否相同,相同就认为是一个元素不能再放进去了,不同-说明是不同的元素,会继续存放在这个位置上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hashcode euqals java