黑马程序员技术交流社区

标题: Integer 包装类的实例进行比较 [打印本页]

作者: 庄星睿    时间: 2012-6-12 13:28
标题: Integer 包装类的实例进行比较
Integer 包装类的实例进行比较,分享一下:
两个超过bye[]类型的数值就不相等
  1. Integer ina=2;
  2. Integer inb=2;
  3. System.out.println(ina==inb); //true
  4. Integer inc=128;
  5. Integer ind=128;
  6. System.out.println(inc==ind); //false
复制代码
这与java的Integer类的设计有关,查看一下java系统中java.lang.Integer类的源代码
  1. static final Integer[] catch=new Integer[-(-128)+127+1];
  2. static
  3. {
  4. for(int i=0;i<catch.length;i++)
  5. catch[i]=new Integer(i-128);

  6. }
复制代码
系统把-128~127之间的整数自动封装成Integer对象,并放入了一个名为catch的数组中缓存起来。如果以后把一个-128~127之间的整数自动装箱成一个Integer对象时,实际上是直接指向对应的数组元素,因此-128~127之间的同一个整数自动装箱成Integer实例时,永远都是引用catch数组的同一个数组元素,所以它们相等;但每次把一个不在-128~127范围内的整数自动装箱成Integer实例时,系统总是重新创建一个Integer实例,所以会出现程序中的运行结果。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2