但是如果:Integer a=128;Integer b=128
则返回false,因为128在缓存中没有了。作者: 王广丛 时间: 2012-6-5 21:30
关于二楼的回答...我做了测试...发现可能会有错误....
二楼的回答是:
Integer a = 127;
1.5 后新特性 自动装箱,等同于Integer a= new Integer(127);
当数值在byte范围内,如果字已经存在 ,新特性不会在开辟空间,否则开辟新空间,而==比较的是地址值
所以 test 结果true , test1 结果false
但是我测试后发现,Integer a = new Integer(127)与Integer a = 127是不一样的,因为Integer a = 127是存储在堆栈中的,而new Integer(127)是存储在堆中的,所以是不一样的。
测试程序如下:
public class Test {
public static void main(String args[]){
Integer a = 127;
Integer b = new Integer(127);
int e = 127;
int f = 127;
System.out.println(a == b);
System.out.println(a == e);
System.out.println(e == f);
Integer c = 128;
Integer d = 129;
System.out.println(c == d);
}
}
输出结果为: