對於基本數據類型 == 比較的是數值
對於引用數據類型 == 比較的是地址
我們在初學Java時,String類我們會使用equals來比較兩個字符串的值是否相等
有些同學就會誤認為equals比較的是引用類型的值。
但實際上,所有對象繼承自Object類。默認情況下,equals比較的仍然是地址。
我們來看壹看Object中equals方法的源碼
this代表代用該方法的對象,obj表示要比較的對象。
我們發現,equals方法又回到了兩者用等於號比較。
即引用數據類型 == 比較的是地址。
那為什麽String類調用equals比較的是值呢?
因為String類重寫了equals方法
String類equals的源碼:
首先還是用==號比較,如果地址相同。兩者當然也相同。
然後下壹步,將裏面的值進行了比較。
對於大部分Java原生對象,大多都重寫了equals方法。
如果不確定,可以ctrl+鼠標左鍵點擊進行查看。
所以我們在自定義對象時,如果不重寫equals方法。
那麽比較的將是兩個對象的地址,即使值相同。但兩者地址不同,仍然會判斷為不相等。