作者Baudelaire (遗憾太常。)
看板java
标题Re: [问题] 请问要如何比较两个物件?
时间Sun Sep 24 03:34:34 2006
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