Java 基础复习实践 --- Hashcode Equals
雖然很多知識(shí)點(diǎn)書籍都有整理,但是記性總是不好,所以決定將一些細(xì)小容易混淆的概念,通過簡(jiǎn)單的 Demo 實(shí)踐,加深復(fù)習(xí)。特此開一個(gè)坑,堅(jiān)持就是勝利。
本章內(nèi)容主要為了理解以下幾個(gè)知識(shí)點(diǎn):
- equals() 的作用是什么?
- equals() 與 “==”的區(qū)別是什么?
- hashcode() 的作用是什么?
- hashcode() 與 equals()之間有什么聯(lián)系?
目錄
- 目錄
- equals() 的作用
- 沒有覆蓋 equals() 方法
- 覆蓋 equals() 方法
equals() 的作用
Indicates whether some other object is “equal to” this one.
equals()是用來(lái)?判斷兩個(gè)對(duì)象是否相等。
equals() 定義在 JDK 的 Object.java 中。通過判斷兩個(gè)對(duì)象的地址是否相等(即,是否是同一個(gè)對(duì)象)來(lái)區(qū)分它們是否相等。源碼如下:
| public boolean equals(Object obj) { return (this == obj);} |
既然是在 Object 類中定義了該方法,就表明了 Java 所有類都實(shí)現(xiàn)了 equals() 方法,所以所有類都可以通過該方法去判斷兩個(gè)對(duì)象是否相等。
默認(rèn)的 equals() 方法等同于 ”==” 方法,所以我們一般會(huì)重寫 equals() 方法 —-> 兩個(gè)對(duì)象的內(nèi)容相等,返回 true ,否則返回 false。
所以我們可以根據(jù)是否?重寫 equals()?方法將類分為兩類:
1.若某個(gè)類沒有覆蓋 equals() 方法,當(dāng)它的通過 equals() 比較兩個(gè)對(duì)象時(shí),實(shí)際上是比較兩個(gè)對(duì)象是不是同一個(gè)對(duì)象。這時(shí),等價(jià)于通過“==”去比較這兩個(gè)對(duì)象
2.覆蓋類的 equals() 方法,來(lái)讓 equals() 通過其它方式比較兩個(gè)對(duì)象是否相等。通常的做法是:若兩個(gè)對(duì)象的內(nèi)容相等,則 equals()方法返回true;否則,返回 false 。
沒有覆蓋 equals() 方法
| public class HashcodeAndEquals { private static <T> void out(T t) {System.out.println(t);} public static void main(String[] args) { // 實(shí)例化兩個(gè) Person 對(duì)象Person p1 = new Person("小明", 12);Person p2 = new Person("小明", 12); // 通過 equals() 比較他們是否相等out(p1.equals(p2));} private static class Person { int age;String name; public Person(String name, int age) { this.age = age; this.name = name;} public String toString() { return name + "--- age:" + age;}}} |
輸出為
false
覆蓋 equals() 方法
from:?http://imxie.cc/2016/07/18/Review-the-Java-basic-equals-hashcode/?utm_source=tuicool&utm_medium=referral
總結(jié)
以上是生活随笔為你收集整理的Java 基础复习实践 --- Hashcode Equals的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么样才算是精通 Python?
- 下一篇: 对map集合进行排序