java 的 == 和equals()区别
先看一个列子:
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(),所以它实际比较的是对象的内容,而非它们的句柄