大家先来看一下如下代码:
package test;
public class Test{
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a==b);
System.out.println(c==d);
}
}
大家猜一下输出的结果是什么?
true
false
是不是和你预想的有点不一样。下面我来详细的解释一下:
大多数情况下,容易有一种假象,即基本类型和他们的对象包装器是一样的,只
是他们的相等性不同。大家知道,==运算符也可以用于对象包装器对象,只不过
检测的是对象是否指向同一个存储区域。
自动装箱规范要求boolean、byte、char<=127,介于-128~127之间的short和int被
包装到固定的对象中,所以都等于128是错误的,都等于127就是正确的了。
值得注意的是:两个包装器对象比较时应该调用equals方法。