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是相等的