Java基础之equals() 和 hashCode()

Posted wangweiminll

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础之equals() 和 hashCode()相关的知识,希望对你有一定的参考价值。

equals()是Object中的一个方法:

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

在Object中equals()方法返回结果其实是跟 == 返回的结果是一致的。但是,子类中对其进行了重写,如String

 1 public boolean equals(Object anObject) {
 2         if (this == anObject) {
 3             return true;
 4         }
 5         if (anObject instanceof String) {
 6             String anotherString = (String)anObject;
 7             int n = value.length;
 8             if (n == anotherString.value.length) {
 9                 char v1[] = value;
10                 char v2[] = anotherString.value;
11                 int i = 0;
12                 while (n-- != 0) {
13                     if (v1[i] != v2[i])
14                         return false;
15                     i++;
16                 }
17                 return true;
18             }
19         }
20         return false;
21     }

此时,代表的含义是,只要两个对象的值相同(字段),这两个对象的equals()的结果便是相同的,这也是equals()的常见用法。

 

Objecct中的hashCode()方法,

hashCode()方法的作用是作为对象的散列值,在HashMap,HashSet,HashSet集合中,可以做到随机访问元素的效果。散列值的使用(hashCode())尽可能多的降低了元素之间进行比较的次数。

1 public native int hashCode();

关于hashCode()方法有:

1.重写一个类的equals()方法,必须重写该类的hashCode()方法;

2.equals()方法返回true 是 hashCode()返回同一个值的充分条件。(这也是equals()方法与hashCode()方法之间的关系)

 

以下是String的hashCode()方法的实现:

在这个实现中,hashCode()的值是String对象中的value字段值映射,结合String的equals()方法的实现,两个方法的实现都依赖于String的字段value,所以二者的结果是一致的。

 1 public int hashCode() {
 2         int h = hash;//hash默认值为0
 3         if (h == 0 && value.length > 0) {
 4             char val[] = value;
 5 
 6             for (int i = 0; i < value.length; i++) {
 7                 h = 31 * h + val[i];
 8             }
 9             hash = h;
10         }
11         return h;
12 }

 

以上是关于Java基础之equals() 和 hashCode()的主要内容,如果未能解决你的问题,请参考以下文章

java基础解析系列---equals==和hashcode方法

Java基础:hashCode与equals个人学习记录

Java开发进阶知识之学习篇——hashCode和equals

Java基础之hashCode方法具体解释

从语言设计的角度探究Java中hashCode()和equals()的关系

Java之hashCode的作用和equals方法的重构规则