也许这个问题应该分为两个,但第一个很简单,它是关于.equals()
。我认为 == 检查两个引用是否指向同一个对象,同时.equals()
检查它们的参数值是否相同,如下所述:http:
//www.coderanch.com/t/409507/java/java/Difference-等于
但后来我尝试运行这个:
public class EqualsTest {
public static void main(String[] args) {
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1.equals(i2));
Nested n1 = new Nested();
Nested n2 = new Nested();
n1.i = i1;
n2.i = i2;
System.out.println(n1.equals(n2));
}
}
class Nested {
Integer i;
}
我得到输出:
true
false
正如预期的那样阅读Javadoc http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#equals(java.lang.Object)
因此,据我了解,要.equals()
与 == 有所不同,我们需要覆盖它。正确的?
我的第二个问题是,有没有什么方法可以使类<A>
中的对象在 a 中唯一(调用时自动覆盖add()
)Set<A>
而不覆盖 .equals() 中的方法<A>
?