1.1 概述
java.lang.Object
類是Java語言中的根類,即全部類的父類。它中描述的全部方法子類均可以使用。在對象實例化的時候,最終找的父類就是Object。java
若是一個類沒有特別指定父類, 那麼默認則繼承自Object類。例如:web
public class MyClass /*extends Object*/ { // ... }
根據JDK源代碼及Object類的API文檔,Object類當中包含的方法有11個。今天咱們主要學習其中的2個:安全
public String toString()
:返回該對象的字符串表示。public boolean equals(Object obj)
:指示其餘某個對象是否與此對象「相等」。
1.2 toString方法
方法摘要
public String toString()
:返回該對象的字符串表示。
toString方法返回該對象的字符串表示,其實該字符串內容就是對象的類型+@+內存地址值。ide
因爲toString方法返回的結果是內存地址,而在開發中,常常須要按照對象的屬性獲得相應的字符串表現形式,所以也須要重寫它。svg
覆蓋重寫
若是不但願使用toString方法的默認行爲,則能夠對它進行覆蓋重寫。例如自定義的Person類:工具
public class Person { private String name; private int age; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } // 省略構造器與Getter Setter }
在IntelliJ IDEA中,能夠點擊Code
菜單中的Generate...
,也可使用快捷鍵alt+insert
,點擊toString()
選項。選擇須要包含的成員變量並肯定。以下圖所示:學習
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NaNkzivx-1574999491678)(img\toString方法的自動重寫.bmp)]優化
小貼士: 在咱們直接使用輸出語句輸出對象名的時候,其實經過該對象調用了其toString()方法。this
1.3 equals方法
方法摘要
public boolean equals(Object obj)
:指示其餘某個對象是否與此對象「相等」。
調用成員方法equals並指定參數爲另外一個對象,則能夠判斷這兩個對象是不是相同的。這裏的「相同」有默認和自定義兩種方式。spa
默認地址比較
若是沒有覆蓋重寫equals方法,那麼Object類中默認進行==
運算符的對象地址比較,只要不是同一個對象,結果必然爲false。
對象內容比較
若是但願進行對象的內容比較,即全部或指定的部分紅員變量相同就斷定兩個對象相同,則能夠覆蓋重寫equals方法。例如:
import java.util.Objects; public class Person { private String name; private int age; @Override public boolean equals(Object o) { // 若是對象地址同樣,則認爲相同 if (this == o) return true; // 若是參數爲空,或者類型信息不同,則認爲不一樣 if (o == null || getClass() != o.getClass()) return false; // 轉換爲當前類型 Person person = (Person) o; // 要求基本類型相等,而且將引用類型交給java.util.Objects類的equals靜態方法取用結果 return age == person.age && Objects.equals(name, person.name); } }
這段代碼充分考慮了對象爲空、類型一致等問題,但方法內容並不惟一。大多數IDE均可以自動生成equals方法的代碼內容。在IntelliJ IDEA中,可使用Code
菜單中的Generate…
選項,也可使用快捷鍵alt+insert
,並選擇equals() and hashCode()
進行自動代碼生成。
tips:Object類當中的hashCode等其餘方法,從此學習。
1.4 Objects類
在剛纔IDEA自動重寫equals代碼中,使用到了java.util.Objects
類,那麼這個類是什麼呢?
在JDK7添加了一個Objects工具類,它提供了一些方法來操做對象,它由一些靜態的實用方法組成,這些方法是null-save(空指針安全的)或null-tolerant(容忍空指針的),用於計算對象的hashcode、返回對象的字符串表示形式、比較兩個對象。
在比較兩個對象的時候,Object的equals方法容易拋出空指針異常,而Objects類中的equals方法就優化了這個問題。方法以下:
public static boolean equals(Object a, Object b)
:判斷兩個對象是否相等。
咱們能夠查看一下源碼,學習一下:
public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }
本文同步分享在 博客「cwl_java」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。