Re: [問題] 請問要如何比較兩個物件?
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
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章