JAVA对象相等 之 hashCode()

it2024-08-19  44

java 判断相等

1. 基础数据类型  == 

2. 对象 == 是比较引用的地址   默认equals()是比较地址, 因此需要改写.  很多类都已经改写好了.

3. hashCode( )

   实际返回值为一个int型数据。用于确定对象在哈希表中的位置      散列表的类常见的有HashMap,HashSet,HashTable        如果一个对象一定不会在散列表中使用,那么是没有必要复写hashCode方法的  

举例:  教程Person已经改写了 public boolean equals(Object obj) , 但是没有改写 hashCode()

Person p1 = new Person(10, "张三"); Person p2 = new Person(10, "张三");   

HashSet<Person> set = new HashSet<Person>(); set.add(p1); set.add(p2);

这个时候虽然 p1.equals(p2) 是true.  但是没有改写 hashCode() 所以值不同,  HashSet 因为是散列表, 还是认为2个不同对象. set里面2个对象.

----------------------------------------------------------------------------------

改写下 hashCode()

@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; }

再执行

Person p1 = new Person(10, "张三"); Person p2 = new Person(10, "张三");   

HashSet<Person> set = new HashSet<Person>(); set.add(p1); set.add(p2);

 

set中只有一个对象, 因为p1和p2是相等的

 

 

最新回复(0)