在我的概念之中,==在對比兩個基本資料型別的時候,對比的是兩者的值是否相同。而在對比兩個引用資料型別的時候,比較的是兩者的記憶體位址是否相同。
而equals方法,我一直認為這個方法是對比兩個引用資料型別的值是否相同的。
但是,今天看到有人說,equals想要比較兩個引用資料型別的內容是否一致,需要重寫。因為object的equals方法是比較位址是否一致的。
然後我就疑惑了,以前好像也沒重寫就可以比較呀,是我記錯了麼?
於是,我決定詳細**一下equals方法。
integer s=new integer(2);integer s1=new integer(2);
system.out.println(s==s1);
system.out.println(s.equals(s1));
可以看到,s和s1是兩個物件,記憶體位址不同,而內容是相同的。
返回結果為:
false
true
那麼問題來了,我沒有對equals方法進行重寫,那麼返回值不應該是兩個false麼?
於是,我看了一下integer的equals底層**
publicboolean
equals(object obj)
return
false
; }
又檢視了一下object的底層**
publicboolean
equals(object obj)
可以看到在object中,equals的確是用於對比記憶體位址是否一致的,而在integer中,這個方法已經被重寫為對比內容是否一致。
關於equals和「 」的詳解
首先,equals,equals最常用的是在string下呼叫,用來比較兩個字串是否相同。但實際上equals是object中的方法,string對其進行了覆寫。object中的equals方法是用來比較兩個物件相等的,但是其預設的是按位址進行比較 並不能對內容進行比較。string覆寫了此方法用來...
關於 和equals的區別
1 對於字串變數來說,使用 和 equals 方法比較字串時,其比較方法不同。比較兩個變數本身的值,即兩個物件在記憶體中的首位址。equals 比較字串中所包含的內容是否相同。2 對於非字串變數來說,和 equals 方法的作用是相同的都是用來比較其 物件在堆記憶體的首位址,即用來比較兩個引用變數是...
關於 和equals的問題
首先equals沒有重寫的話和 是沒有區別的。如果是基本資料型別使用 則判斷的是值是否相等,如果是引用型別使用 則判斷的是位址是否相等。通常犯的錯誤就是字串的equals和 的比較,因為equals的底層是實現了重寫的,所以與 就有區別了,其中equals比較的是內容,比較的是引用型別的位址。str...