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

看板java作者 (遺憾太常。)時間19年前 (2006/09/24 03:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/6 (看更多)
equals()的實做在Effective Java裡講得很清楚, 可以去找來看。 如果直接實做 c1== c2 或者 c1.equals(c2) , 會比較兩者的memory addr., 既然是兩個物件,那當然會是false, 除非在Class C裡你已經做出singleton, (private constructor,getInstance之類的) 這樣兩者怎麼比較都是同一個。 對於你的問題, 最簡單的答案當然是override public boolean equals(), 然後比較裡面的data; 粗看起來你的資料應該沒有inheritance的架構, 不過要小心把你這些資料丟到hash-based 的collection, 如果這樣的話就要再override hashCode()。 比較安全的equals()如下: public boolean equals(Object obj) { // 檢查兩者是不是同一個reference if(this == obj) return true; // 檢查obj 是不是 C 物件的instance // 如果 C 物件跟其他物件有繼承關係, // 這一行比較很重要 if (!(obj instanceof C)) return false; // 檢查C裡面的資料 C tmp = (C) obj; return tmp.data == data && ... ; } 然後實做hashCode(), 詳情請參見Effective Java...。 ※ 引述《teamspike (市政府7F)》之銘言: : C c1 = new C(); : C c2 = new C(); : 因為是指向不同物件的關係 : 若是用 if (c1 == c2) or c1.equals(c2)得到的結果都將會是false; : 可是若兩個物件是相同但不同個 : 比方說都是c1 and c2都是load同一個檔案 : 要如何去判斷兩個物件是相同但是是個別的兩個物件呢? : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 66.108.81.124
文章代碼(AID): #155OYf96 (java)
文章代碼(AID): #155OYf96 (java)