HashCode相等两个类一定相等码?equals呢?
HashCode
在java
中,代表了对象的一种特征,不同对象哈希码是不同的。哈希码是一种数据结构算法。
- 例如
String
类中的hashCode
是根据String
类中包含字符串获取的,那么只要字符内容相等的,哈希码也是相同的。
1 | String a = "text"; |
结果是true
。
Integer
类中的hashCode
和String
是一样的,也是根据类中包含的值去生成的哈希码。
1 | Integer a = 1; |
结果为true
Object
类中的hashCode
则和上面两种情况不一样了,他是根据对象的内存地址经过哈希算法获取到的哈希码,由于对象的内存地址不相同,所以hashCode
是不同的。
重写equals
方法首先比较的是对象的地址值是否相等,其次是比较对象的内容是否相等。
在java
中equals
和hashCode
是有设计要求的,equals
相等,则hashCode
一定相等,反之则不然。
String
和Integer
都重写了hashCode
方法和equals
方法,在实际开发当中为了在集合中保证我们的对象唯一,自定义类应该都重写hashCode
方法和equals
方法,当然在Singleton
模式的类可以不用重写。
原文作者: dgb8901,yinxing
原文链接: https://www.itwork.club/2018/07/13/hashCode-and-equals/
版权声明: 转载请注明出处
为您推荐
体验小程序「简易记账」
关注公众号「特想学英语」