关于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()和equals()的本质区别和联系
- java关于equals与==号的区别以及与hashCode的关系
- 关于hashCode和equals的处理
- equals和==及hashcode的区别
- hashCode与equals的区别与联系
- Java中==、equals()、hashCode()区别
- 程序员必须搞清的概念-equals和=和hashcode的区别
- hashCode与equals的区别与联系详解
- 关于重写equals,hashcode以及compareTo方法!
- hashcode和equals方法的区别和联系
- [厉害了,我的JAVA基础](十一)hashCode与equals的区别与联系
- 关于java的equals和hashcode方法
- Java中“==”、equals()、hashcode()的区别与联系。
- hashCode与equals的区别与联系
- hashCode与equals的区别与联系 .
- 关于hashcode和equals方法重写的一些理解!
- Java中equals()和hashCode()的区别与联系
- Java中==,equals和hashCode的区别
- hashCode与equals的区别与联系
- 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例