關於變數之間的比較,可以分為基礎型別變數的比較和物件之間的比較。
對於基本型別來說,他們儲存在jvm的棧中,因此比較的是變數的內容,也就是比較的變數的值。
對於引用型別來說,因為物件內容儲存在jvm的堆中,棧中只是儲存物件的引用(位址),無論是==還是equals比較的都是棧中的內容,即物件的引用,也就是比較的是兩個物件的位址。但根據建立物件的方式不同可以分為兩種情況:
1. 使用表示式建立物件:
2.使用new方法建立物件:
這裡會引入兩個新的問題:
1.為什麼表示式建立和new建立,會讓==比較產生不同的結果。
這是因為jvm在程式執行的時候會建立乙個緩衝池,當使用表示式建立的時候,程式會在緩衝池中尋找相同值的物件,如果找到,就把這個物件的位址賦給當前建立的物件,因此,c和d實際上都指向了c的引用。因此在使用==時會返回true。
當用new建立物件時,是在堆中重新分配記憶體,因此棧中的引用是不相同的,所以,a和b引用的是值相同的不同物件。所以a==b返回false
2.既然equals比較的是引用,那麼a.equals(b)為什麼返回true。這是因為在integer裡,重寫了equals方法!
我們可以自己建立乙個類,並驗證。
1.當自定義value類中沒有重寫equals方法時,呼叫equals方法返回結果為false。說明此時equals比較的並不是內容。
2.重寫equals方法。
Equals與 比較的區別
是關係 運算子 表示兩邊是否相等 用於基本資料型別的時候可以表示兩邊的值是否相等 用於物件的時候 表示比較物件的位址是否向等。equals 方法是object提供的方法,用來比較物件,object實現比較的時候依然使用的是 號 也就是說 object的equals 方法還是比較物件的記憶體位址。如果...
HashCode與equals比較物件
equals介紹 所有的類都繼承了equals 方法,預設比較兩個物件的位址是否相同,也可以重寫。兩個物件用equals比較相同,那麼物件一定相同 hashcode介紹 所有的類都繼承了hashcode 方法。作用是獲取雜湊碼,也稱為雜湊碼 它返回乙個int整數。雜湊碼的作用是確定該物件在雜湊表中的...
equals比較物件
對事物的乙個分類,他們具有相同的屬性和動作。世間萬物皆物件。類是物件的抽象。物件是類的實體。dog dog1 new dog 旺財 dog dog2 new dog 大黃 public class dog 現在有這兩個物件,dog類中有string name和int id兩個屬性,我們如何使用equ...