比如:string s1 = "abc";
string s2 = new string("abc");
equals返回true,但是不「==」,但是他們的hashcode是相同的,為什麼不「==」
最佳答案
string s1 = "abc";
s1指向了「abc」
string s2 = new string("abc");
生成了物件new string("abc");s2指向這個物件,這個物件引用了「abc」;
equals意義是判斷內容是否一直因為s1內容為「abc」,s2內容也為「abc」因此返回true。
==是判斷引用是否一致,s1、s2指向不同所以返回false。
83299387gvirus說法不對「abc」只生成一次,具體是生成在堆還是棧不同虛擬機器實現原理不同。
具體可以參照:
判斷兩個物件內容相等與equals方法
判斷兩個物件內容相等 不能直接呼叫object類裡的equals方法,將equals方法寫到object類當中是讓所有物件都擁有equals方法,它的目的是給開發者重寫的,不然其方法實現的功能與 一模一樣 而用 號是不能判斷兩個物件內容相等的 eg.user a new user user b ne...
判斷兩個物件是否相等 equals 方法重寫分析
如果想要判斷堆中兩個物件的內容是否一樣,需要重寫equals 方法,根據雜湊約定,如果兩個物件的equals 相等,那麼這兩個物件的hashcode 也應該相等,即重寫equals 的同時,也要重寫hashcode 快捷鍵 alt shift s generate hashcode and equa...
比較兩個物件是否相等之重寫equals 方法
題目簡述 自定義乙個person類,有name和age屬性,並建乙個兩個引數的建構函式,在主函式main中,定義兩個person物件p1和p2,如下,呼叫equals比較這個兩個物件是否相等。person p1 new person xiaowang 12 person p2 new person ...