public class BoxingTest {
public static void main(String[] args) {
Integer x = 127;
Integer y = 127;
System.out.println("x==y = " + (x == y)); //较小的两个相同的Integer返回true
System.out.println("x.equals(y) = " + x.equals(y));
Integer m = 999;
Integer n = 999;
System.out.println("(m==n) = " + (m == n)); //较大的两个相同的Integer返回false
System.out.println("m.equals(n) = " + m.equals(n));
}
}
/*
x==y = true
x.equals(y) = true
(m==n) = false
m.equals(n) = true
*/
==比较,较小的两个相同的Integer返回true,较大的两个相同的Integer返回false,这是因为Integer是不变类,编译器把Integer x = 127;自动变为Integer x = Integer.valueOf(127);为了节省内存,Integer.valueOf()对于较小的数(<=127),始终返回相同的实例,因此,==比较“恰好”为true,但我们绝不能因为Java标准库的Integer内部有缓存优化就用==比较,必须用equals()方法比较两个Integer;