1:==分析
1.2:基本类型比较
判断基本类型的数值是不是相等
1.3:对象类型比较
判断两个引用是不是指向同一个对象,即内存地址是不是相等。
2:equals分析
来判断对象内容是不是相等,一般有以下两种情况来分析。
1:没有覆盖equals时,与==相等,判断是不是同一个对象。
2:在覆盖情况下,有自己定义的规则来判断两个对象是不是相等。
3:代码示例
Class Main{ public void main(String[] args){ String a = new String("aa"); String b = new String("aa"); String aa = "aa"; String bb = "aa"; } }
4:HashCode方法
4.1:介绍
HashCode方法返回对象的哈希值,是一个int型的变量,该方法定义在Object类中。该哈希码的作用是给每一个对象一个哈希值为了能够在哈希表中快速找到位置。
4.2:HashCode与equals的关系和区别
我们以HashSet为例子,来讲解HashCode的用处。在HashSet中,判断key值的重复问题,如果两个对象HashCode相等,则调用equals方法来判断是否真的相等,若也相等也认为是重复的key,不能添加。这样说就能大大减少equals方法的使用来减少判断,提高运行速度。
- 如果两个对象相等,则hashcode一定也是相同的
- 两个对象相等,对两个对象分别调用equals方法都返回true
- 两个对象有相同的hashcode值,它们也不一定是相等的
- 因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖,否则即便euqals相等,在HashSet中,由于hadhCode方法没有重新所有Object对象都不可能相等,造成问题,即便拥有相等内容equals相等。
- hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)