Integer 包装类的实例进行比较,分享一下:
两个超过bye[]类型的数值就不相等- Integer ina=2;
- Integer inb=2;
- System.out.println(ina==inb); //true
- Integer inc=128;
- Integer ind=128;
- System.out.println(inc==ind); //false
复制代码 这与java的Integer类的设计有关,查看一下java系统中java.lang.Integer类的源代码- static final Integer[] catch=new Integer[-(-128)+127+1];
- static
- {
- for(int i=0;i<catch.length;i++)
- catch[i]=new Integer(i-128);
- }
复制代码 系统把-128~127之间的整数自动封装成Integer对象,并放入了一个名为catch的数组中缓存起来。如果以后把一个-128~127之间的整数自动装箱成一个Integer对象时,实际上是直接指向对应的数组元素,因此-128~127之间的同一个整数自动装箱成Integer实例时,永远都是引用catch数组的同一个数组元素,所以它们相等;但每次把一个不在-128~127范围内的整数自动装箱成Integer实例时,系统总是重新创建一个Integer实例,所以会出现程序中的运行结果。
|