java 的 == 和equals()区别

时间:2022-01-24 14:11:44

先看一个列子:

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(),所以它实际比较的是对象的内容,而非它们的句柄