equals 的作用

判断两个对象是否相等

JDK Object equals 默认实现

1
2
3
public boolean equals(Object obj) {
return (this == obj);
}

可以通过复写equals方法来改变判断条件

Java 对equals的要求

  • 对称性 if x.equals(y) == true then y.equals(x) == true
  • 反射性 x.equals(x) == true
  • 类推性 x.equals(y) == true and x.equals(z) == true then y.equals(z) == true
  • 一致性 x.equals(y) == true 如果x和y的值不变,无论执行多少次,x.equals(y) == true
  • 非空性 x.equals(null) == false

equals vs ==

  • equals 比较两个对象是否相等,如果复写了equals方法则按照复写的方法进行比较,如果没有复写,则按照内存地址进行比较(同==)
  • == 比较两个对象是否相等,比较的是内存地址

hashCode

hashCode的作用是获取哈希码,也称之为散列码;它实质上是返回一个int整数。这个哈希吗的作用是确定该对象在哈希表的索引位置。

hashCode只有散列表中才有作用,其他情况下没有作用,一般我们创建一个类、或者对象数组的时候,hashCode是没有作用的.

Java集合中本质是散列表的类,如HashMap,Hashtable,HashSet。

散列码的作用
散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!
散列表的本质就是通过数组实现的,当我们要获取散列表中的某个“值”的时候,实际上是要获取数组中某个位置的元素。而数组的位置,是通过“键”对应的散列码计算得到的。