先看一个列子:
public class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
}
通常我们都以为结果是 第一个true第二个false,但实际结果却是第一个false第二个true.
究其原因,n1和n2其实是对象,他们的句柄是不同的,而==和!=比较的正是句柄,而不是对象内容,所以才出现上面的结果,而如果要比较像个对象的值呢?
就应该用equals, 例如:
public class EqualsMethod {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));
}
}
与我们预料的一样,结果是true, 但是, 实际上equals默认行为仍然是比较句柄,只是大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄