編輯:我是 java 新手,正在閱讀官方檔案,為即將到來的計算機科學研究科目做準備。
原始問題:
所以我檢查了這個執行緒re: java==并且.equals在我正在撰寫的虛擬代碼中得到了一些意想不到的結果。
我有這個:
public class HelloWorld {
public static void main(String[] args){
Double double1 = 1.0; //object 1
Double double2 = 1.0; //object 2, which should be a different memory address?
System.out.println(double1.equals(double2)); //compare using the Object.equals() method
System.out.println(double1 == double2); //compare with ==
}
}
//Results are:
//true
//false
正如預期的那樣,==產生 afalse因為這兩個物件參考了不同的記憶體地址。
然而,它double.equals(double2)正在產生一個true,這不是我所期望的。在這個例子中,我沒有覆寫默認.equals()繼承自Object. 我的理解是equals檢查參考相等性和值。
那么為什么在這個例子中double1.equals(double2)回傳true而不是回傳呢?false不是double1anddouble2指的是兩個不同的物件,因此equals()應該回傳false嗎?
uj5u.com熱心網友回復:
您沒有 override equals,但是 的實作java.lang.Double確實會覆寫它,如果基礎值比較相等(加上幾個邊緣情況),則回傳 true 。
https://docs.oracle.com/javase/8/docs/api/java/lang/Double.html#equals-java.lang.Object-
uj5u.com熱心網友回復:
我的理解是 equals 檢查參考相等性和值。
這是不正確的。
equals(Object)定義的版本就是這樣java.lang.Object做的。但是許多類重寫 equals(Object)以具有不同的語意。
Double覆寫它,所有其他“原始包裝器”類也是如此,而且String......還有很多很多。
覆寫的語意通常是按值相等的,但并非總是如此。有些類不會覆寫equals. 沒有被絆倒的例子equals是StringBuilder陣列型別!
要找出語意,SomeType.equals(Object)您需要從 javadocs for SomeType... not開始Object。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/504485.html
上一篇:帶有JS的可折疊直接下拉選單
