包装类实例对象使用“equals”的一个疑惑问题
代码如下(已经在jdk1.6.10下编译测试运行,无异常报错)
public TestEquals{
public static void main(String... args){
for(int i=0;i<150;i++){
Integer i1 = i;
Integer i2 = i;
System.out.print("i=" + i + " ");
System.out.println(i1.equals(i2));
}
}
}
输出结果令人迷惑:
i=1 true
i=2 true
...
i=127 true
i=128 false
...
i=149 false
为什么从i=128开始,euqals比较输出就为false???
我也是在无意中发现,开始设定i=5时,输出为TRUE,后来设定一个i=200,输出就为false;所以写了上面这个循环测试代码。
初学者,还请各位高手指点迷津......
------解决方案--------------------这是因为java里面的缓存作用。只是缓存了一个字节。
------解决方案--------------------1楼正解,Iterger类对int数据类型做了对象封装。
但做了优化一个字节,128不在这个范围。