日期:2014-05-20  浏览次数:20687 次

包装类实例对象使用“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不在这个范围。