高强度学习训练第十二天总结:Java hashCode和equals的关系

今天要收拾东西。草草的总结下。。

1.如果两个对象相等,则hashcode一定也是相同的

2.两个对象相等,对两个对象分别调用equals方法都返回true

3.两个对象有相同的hashcode值,它们也不一定是相等的

4.因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖

5.hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)

equals的作用

equals()的作用是用来判断俩个对象是否相等

equals()定义在JDK的Object.java中。通过判断俩个对象的地址是否相等(即,是否是同一对象)来区分它们是否相等。

源码如下:

public boolean equals(Object obj){
return (this == obj)
}

hashCode() 的作用

hashCode() 的作用是获取哈希码,也称散列码;它实际上是返回一个int整数。

这个哈希码的作用是确定该对象在哈希表的索引位置

hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。

虽然,每个Java类都包含hashCode() 函数。但是,仅仅当创建并某个“类的散列表”(关于“散列表”见下面说明)时,该类的hashCode() 才有用(作用是:确定该类的每一个对象在散列表中的位置;其它情况下(例如,创建类的单个对象,或者创建类的对象数组等等),类的hashCode() 没有作用。上面的散列表,指的是:Java集合中本质是散列表的类,如HashMap,Hashtable,HashSet。也就是说:hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。

== 与 equals

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)。

equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:

情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。

情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

上一篇:OC中的自动引用计数


下一篇:sigmoid function和softmax function