Posted on 2009-08-08 12:38
BBT_soft 阅读(2002)
评论(6) 编辑 收藏
《think in java》中有这么一段话:
如果想比较两个对象的实际内容是否相同,又该如何操作呢?此时,必须使用所有对象都使用的特殊方法equals()。但这个方法不适用于"基本类型",基本类型直接使用==和!=即可。如:
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(ne.equals(n2));
正如我们预计的那样,此时得到的结果是true。但事实上并不总是这么简单!假设您创建了自己的类,像下面这样:
class Value{
int i;
}
public class Test{
public static void main(String[] args){
Value v1 = new Value();
Value v2 = new Value();
System.out.println(v1.equals(v2));
}
}
此时的结果又变回了false!
这是由于equals()的默认行为是比较引用。所以除非在自己的新类中重载equals()方法,否则不可能表现出我们希望的行为。
大多数Java类库都实现了用来比较对象内容的equals()方法,而非比较对象引用的equals()方法。
个人理解:equals()默认行为是比较引用,只是现在绝大多数Java类库都实现了用来比较对象内容的equals()方法,而并没有实现比较对象引用的equals()方法。所以现在说equals()比较的是内容,如果自己的类实现比较对象引用的equals()方法,也可以说equals()比较对象的引用,只是实现问题。