當《阿裡巴巴Java開發手冊》發佈後,我也是仔細進行了閱讀,想從中找出一些“標準”,讓自己的代碼質量提高。手冊中對 Object 的 equals 方法的使用進行了強制,而且推薦使用 JDK7 中工具類 Objects 的 equals 方法,至此之後我就很少使用 Object.equals() 方... ...
前言
當《阿裡巴巴Java開發手冊》發佈後,我也是仔細進行了閱讀,想從中找出一些“標準”,讓自己的代碼質量提高。手冊中對 Object
的 equals
方法的使用進行了強制,而且推薦使用 JDK7 中工具類 Objects
的 equals
方法,至此之後我就很少使用 Object.equals()
方法了。
一、Java開發手冊說明
在第一章:編程規約 -> 第四節:OOP規約 -> 第6條內容如下圖:
這裡說 Object.equals()
方法容易拋空指針異常,空指針異常相信大家並不陌生,應該使用確定有值的對象來調用 equals()
方法,不能無中生有,不能從 null
調用方法,還舉了正例與反例。最後推薦使用 Objects.equals()
方法。
二、Object.equals()方法
Object.equals()
方法是 Java 語言中的一個基礎方法,用來比較兩個對象是否相等。以下是它的源代碼實現:
public boolean equals(Object obj) {
return (this == obj);
}
這個方法的實現非常簡單,它首先用引用比較來檢查傳遞給它的參數對象是否是當前對象本身,如果是,則返回 true
,表示兩個對象相等。否則,它返回 false
,表示兩個對象不相等。
我們需要註意的是,Object
的 equals()
方法是根據對象的引用來判斷兩個對象是否相等的,而不是根據對象的內容。如果我們要比較兩個對象的內容是否相等,我們需要重寫 equals()
方法,這樣就可以根據對象的具體內容來判斷它們是否相等了。
比如 Java 中的字元串類 String
就是通過重寫 equals()
方法來實現字元串內容的比較的。例如,以下代碼比較兩個字元串的內容是否相等:
String str1 = new String("你好");
String str2 = new String("你好");
// 比較兩個字元串的內容是否相等
if(str1.equals(str2)) {
System.out.println("這兩個字元串內容相等。");
}
else {
System.out.println("這兩個字元串內容不相等");
}
執行結果為:
這兩個字元串內容相等。
三、Objects.equals()方法
Java 中的 Objects.equals()
方法實際上是由 Java 中的 Objects
類提供的靜態方法,以下是它的源代碼:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
這個方法的實現非常簡潔,它首先通過引用比較來檢查傳遞給它的兩個對象是否相同。如果相同,它直接返回 true
。否則,它進一步檢查第一個參數是否為 null
,如果為 null
,則返回 false
。否則,它調用第一個參數的 equals()
方法來比較兩個對象的內容是否相同。
我們需要註意的是,這個方法中使用的是邏輯或運算符(||
)。首先檢查第一個條件是否為 true
,只有當第一個條件為 false
時才會執行第二個條件。這種方式在 Java 中有時被稱為 "short-circuiting"。這裡也就是短路或,這種技巧可以用來提高代碼的效率,避免執行不必要的操作。
Objects.equals()
方法是 Java 中用於比較兩個對象是否相等的一個實用工具方法,它可以處理對象為 null
的情況,避免了因對象為 null
而產生 NullPointerException
的問題。具體來說,如果兩個參數都是 null
,則返回 true
;如果一個參數是 null
而另一個不是 null
,則返回 false
;否則,調用第一個參數的 equals
方法進行比較。這樣就避免了空指針異常了。
四、Objects.equals()和Object.equals()
Java 中的 Objects.equals()
和 Object.equals()
方法都用於比較兩個對象是否相等,但是它們之間還是有一些差異的。
-
對比
null
值:Objects.equals()
方法可以比較null
值,而Object.equals()
方法不能比較null
值,如果比較null
值,將會拋出NullPointerException
。 -
實現原理:
Objects.equals()
方法內部調用的是第一個對象的equals()
方法進行比較,如果第一個對象為null
,則直接返回與第二個對象比較的結果。而Object.equals()
方法直接比較兩個對象的引用是否相同。 -
參數類型:
Objects.equals()
方法的兩個參數可以是任意類型,而Object.equals()
方法的參數必須是Object
類型。
總結
建議使用 JDK7 中工具類 Objects
的 equals
方法。
關註公眾號:編程火箭車
我們定期發佈編程相關的文章、資訊、活動等內容。幫助編程愛好者、初學者或初級程式員快速入門、打牢基礎。歡迎大家關註,和我們一起探索編程的精彩世界。
本文來自博客園,作者:編程火箭車,轉載請註明原文鏈接:https://www.cnblogs.com/coding-rocket/p/17460977.html