Re: [問題] 請問要如何比較兩個物件?

看板java作者 (kevingo)時間19年前 (2006/09/23 23:00), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/6 (看更多)
以單純沒有被覆寫(Override)的equals()方法來說,他是比較兩個物件在stack 記憶體區塊中的內容是否相等。也就是比較兩個物件的object reference。 針對以上的說明,我再說清楚一點。 比如說: class MyClass { String name; MyClass(String s) { name = s; } } class MyClassEx { public static void main(String [] args) { MyClass m1 = new MyClass("Java"); MyClass m2 = new MyClass("Java"); System.out.println(m1.equals(m2)); } } 上面這樣的結果是會回傳false的。原因是因為 m1 和 m2 兩個是不同的物件,在stack 記憶體區塊中的值是不同的(可能一個是xad5c、一個是x4rfd之類的) 至於要怎麼樣比較,這樣就是歸類到business logic的範圍當中,必須要由 程式設計師自己來定義。 ※ 引述《adrianshum@kkcity.com.tw ( )》之銘言: : ※ 引述《tkcn.bbs@ptt.cc (小安)》之銘言: : > 如果這個 C 是你自己寫的物件 : > 你必須自己定義什麼叫做 "相同" : > 也就是 override equals method : > 例如: public boolean equals(C c){ : > return this.value == c.value; : > } : > 如果你沒有這麼做, : > 則將會繫結至 Object.equals() : > 而 Object.equals() 又是以 hashCode 作判斷....hmm.. : 沒記錯的話, Object.equals() 並非以hashCode 作判斷. : 只是單純檢查是不是同一個 instance 而已 : Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.165.120.21 ※ 編輯: kevingo 來自: 218.165.120.21 (09/23 23:06) ※ 編輯: kevingo 來自: 218.165.120.21 (09/24 00:33)
文章代碼(AID): #155KmfLo (java)
文章代碼(AID): #155KmfLo (java)