HashCode相等两个类一定相等码?equals呢?

HashCodejava中,代表了对象的一种特征,不同对象哈希码是不同的。哈希码是一种数据结构算法。

  1. 例如String类中的hashCode是根据String类中包含字符串获取的,那么只要字符内容相等的,哈希码也是相同的。
1
2
3
String a = "text";
String b = "text";
System.out.println(a.hashCode() == b.hashCode())

结果是true

  1. Integer类中的hashCodeString是一样的,也是根据类中包含的值去生成的哈希码。
1
2
3
Integer a = 1;
Integer b = 1;
System.out.println(a.hashCode == b.hashCode())

结果为true

  1. Object类中的hashCode则和上面两种情况不一样了,他是根据对象的内存地址经过哈希算法获取到的哈希码,由于对象的内存地址不相同,所以hashCode是不同的。

重写equals方法首先比较的是对象的地址值是否相等,其次是比较对象的内容是否相等。

javaequalshashCode是有设计要求的,equals相等,则hashCode一定相等,反之则不然。

StringInteger都重写了hashCode方法和equals方法,在实际开发当中为了在集合中保证我们的对象唯一,自定义类应该都重写hashCode方法和equals方法,当然在Singleton模式的类可以不用重写。

原文作者: dgb8901,yinxing

原文链接: https://www.itwork.club/2018/07/13/hashCode-and-equals/

版权声明: 转载请注明出处

为您推荐

体验小程序「简易记账」

关注公众号「特想学英语」

HashMap、HashTable和ConcurrentHashMap底层实现有什么区别?