Java基礎 第三節 第一課
概述
java.lang.object
類是 Java 語言中的根類, 即所有類的父類. 它中描述的所有方法子類都可以使用. 在物件例項化的時候, 最終找到的父類就是 Object.
如果一個類沒有特別值定父親, 那麼預設則繼承自 Object 類. 例如:
public class MyClass /*extends Object*/ {
// ...
}
根據 JDK 原始碼及 Object 類的 API 文件, Object 類當中包含的方法有 11 個. 今天我們主要學習其中的 2 個:
public String toString()
: 返回該物件的字串表示public boolean equals(Object obj)
: 指示其他某個物件是否與此物件 “相等”.
toString 方法
方法摘要
public String toString()
: 返回該物件的字串表示.
toString 方法返回該物件的字串表示, 其實該字串內容就是物件的型別 + @ +記憶體地址值.
由於 toString 方法返回的結果是記憶體地址, 而在開發中, 經常需要按照物件的屬性得到相應的字串表現形式, 因此需要重寫它.
覆蓋重寫
如果不希望使用 toString 方法的預設行為, 則可以對它進行覆蓋重寫. 例如自定義 Person 類:
public class Person {
private String name;
private int age;
// get/set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 覆蓋重寫toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
在 IntelliJ IDEA 中, 可以點選 Code 選單中的 Generate, 也可以使用快捷鍵 alt + insert, 點選 toString() 選項. 選擇需要包含的成員變數並確定. 如下圖所示:
注: 在我們直接使用輸出語句輸出物件名的時候, 其實通過該物件呼叫了其 toString() 方法.
equals 方法
方法摘要
public boolean equals(Object obj)
: 指其他某個物件是否與此物件 “相等”.
呼叫成員方法 equals 並指定引數為另一個物件, 則可以判斷這兩個物件是否是相同的. 這;裡的 “相同” 有預設和定義兩種方式.
預設地址比較
如果沒有覆蓋重寫 equals 方法, 那麼 Object 類中預設進行 == 運算子的地址比較, 只要不是同一個物件, 結果必然為 flase.
物件內容比較
如果希望進行物件的內容比較, 即所有或指定的部分成員相同就判斷兩個物件相同. 則可以覆蓋重寫 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() 進行自動程式碼生成. 如下圖所示:
注: Object 類當中的 hashCode 等其他方法, 今後學習.
Objects 類
在剛才 IDEA 自動重寫 equals 程式碼中, 使用到了java.util.Objects
類, 那麼這個類是什麼呢?
在 JDK7 中新增了一個 Objects 工具類, 它提供了一些方法來操作物件. Objects 類由一些靜態的實用方法組成, 這些方法是 null-save (空指標安全的) 或 null-tolerant (容忍空指標的), 用於計算物件的 hashcode, 返回物件的字串表示形式, 比較兩個物件.
在比較兩個物件的時候, Objects 的 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));
}
相關文章
- Java基礎 第三節 第五課Java
- Java基礎 第三節 第七課Java
- Java基礎 第三節 第六課Java
- Java基礎 第二節 第三課Java
- Java基礎 第三節 第十課Java
- Java基礎 第一節 第八課Java
- Java基礎 第三節 第二十課Java
- ARM第一節基礎課
- Java基礎 第二節 第十課Java
- Java基礎 第二節 第二十一課Java
- 第一章-JAVA基礎-課後總結和課後習題Java
- 第一節課心得
- java基礎第二季最後一節課練習Java
- JAVA入門第三季第一章第九節課後練習題!Java
- android基礎學習-java篇day7-step3-第三節:java字串AndroidJava字串
- 機器學習進階 第一節 第一課機器學習
- Java 第一課Java
- Java第一課Java
- 老王的JAVA基礎課:第5課 物件導向Java物件
- Java基礎程式碼季節判斷季節1Java
- 第一課 php基礎語法 變數 函式PHP變數函式
- 基礎課程
- 機器學習進階 第一節 第九課機器學習
- 機器學習進階 第一節 第四課機器學習
- 機器學習進階 第一節 第七課機器學習
- 初等數學O 集合論基礎 第三節 序關係
- Java基礎之第一章概述Java
- Python基礎(二十):物件導向“類”第三課——類成員Python物件
- 開課吧Java課堂:小應用程式基礎是什麼Java
- 學習筆記【MySQL基礎操作-第一節:MySQL基本操作】筆記MySql
- 機器學習進階 第一節 第十六課機器學習
- 資料結構 第一節 第六課資料結構
- iOS基礎細節iOS
- SOAP 節點基礎
- Java基礎回顧(牛客網專案課程)Java
- python第一節課內容及練習Python
- 10.15 見習後的第一節課
- java基礎一些演算法(第三篇)Java演算法