關於 和equals的探索

2022-07-02 16:06:12 字數 855 閱讀 4034

在我的概念之中,==在對比兩個基本資料型別的時候,對比的是兩者的值是否相同。而在對比兩個引用資料型別的時候,比較的是兩者的記憶體位址是否相同。

而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底層**

public

boolean

equals(object obj)

return

false

; }

又檢視了一下object的底層**

public

boolean

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...