Java之 Object類
0x01. Object類
Object類的概述
-
java.lang.Object
類是Java語言中的根類,即所有類的父類。如果一個類沒有特別指定父類, 那麼預設則繼承自Object類。例如:
public class MyClass /*extends Object*/ { // ... }
-
根據JDK原始碼及Object類的API文件,Object類當中包含的方法有11個。今天我們主要學習其中的2個:
-
public String toString()
:返回該物件的字串表示。 -
public boolean equals(Object obj)
:指示其他某個物件是否與此物件“相等”。
1、toString方法
需學會的知識點:
- toString方法的概述
- 重寫toString方法
toString方法的概述
public String toString()
:返回該物件的字串表示,其實該字串內容就是:物件的型別名+@+記憶體地址值。
由於toString方法返回的結果是記憶體地址,而在開發中,經常需要按照物件的屬性得到相應的字串表現形式,因此也需要重寫它。
重寫toString方法
如果不希望使用toString方法的預設行為,則可以對它進行覆蓋重寫。例如自定義的Person類:
public class Person { private String name; private int age; // alt + insert -> toString() 回車 @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } // 省略構造器與Getter Setter }
在IntelliJ IDEA中,可以點選Code
選單中的Generate...
,也可以使用快捷鍵alt+insert
,點選toString()
選項。選擇需要包含的成員變數並確定。
小貼士: 在我們直接使用輸出語句輸出物件名的時候,其實通過該物件呼叫了其toString()方法。
小結
- toString方法預設返回的字串內容格式: 物件的型別+@+十六進位制數的地址值
- 列印物件的時候,其實就是列印該物件呼叫toString方法返回的字串內容
- 如果列印物件的時候不希望列印的是地址值的形式,那麼就可以去重寫toString方法,指定返回的字串內容格式 ---->一般開發中,重寫toString方法---alt+insert--->toString() 回車
2、equals方法
equals方法的概述
public boolean equals(Object obj)
:指示其他某個物件是否與此物件“相等”。
#### equals方法的使用
預設地址比較
Object類的equals()方法預設是==比較,也就是比較2個物件的地址值,對於我們來說沒有用
物件內容比較
如果希望進行物件的內容比較,即所有或指定的部分成員變數相同就判定兩個物件相同,則可以覆蓋重寫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等其他方法,今後學習。
小結
-
概述: equals方法可以判斷兩個物件是否相同
-
1.Object類的equals方法預設比較的是2個物件的地址值是否相同 ==一樣的效果 2.如果在開發中,希望呼叫equals方法比較的不是2個物件的地址值,那麼就需要重寫equals方法,指定比較規則 一般開發中,重寫toString方法,使用idea的快捷鍵alt+insert--->equals and hashCode 回車
3、Objects類
- Objects類的概述
- Objects類中的equals方法的使用
講解:
在剛才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) {
// 如果比較的2個物件的地址值相同,就直接返回true
// 如果2個物件的地址值不同:
// 如果第一個物件a等於null,就直接返回false
// 只有第一個物件a不等於null,才會執行a.equals(b)比較這2個物件是否相等
return (a == b) || (a != null && a.equals(b));
}