Skip to main content
 首页 » 编程设计

Java Integer类实现方式和注意事项

2022年07月19日22freeliver54

java.lang.Integer类的源代码:

//定义一个长度为256的Integer数组 
static final Integer[] cache = new Integer[-(-128) + 127 + 1]; 
static { 
      //执行初始化,创建-128到127的Integer实例,并放入cache数组中 
      for(int i = 0; i < cache.length; i++) { 
            cache[i] = new Integer(i - 128); 
      }       
}

从上面代码可以看出,系统把一个-128~127之间的整数自动装箱成Integer实例,并放入了一个名为cache的数组中缓存气力啊。如果以后把一个-128~127之间的整数自动装箱成一个Integer实例时,实际上是直接指向对应的数组元素,因此-128~127直接的同一个整数自动装箱成Integer实例时,永远都是引用cache数组的同一个数组元素,所以他们全部相等;但每次把一个不再-128~127范围内的整数自动装箱成Integer实例时,系统总是重新创建一个Integer实例,所以会出现下面代码的运行结果:

//通过自动装箱,允许把基本类型值赋值给包装类实例 
Integer ina = 2; 
Integer inb = 2;//输出true 
System.out.println("两个2自动装箱后是否相等:" + (ina == inb)); 
 
Integer biga = 128; 
Integer bigb = 128; 
//输出false 
System.out.println("两个128自动装箱后是否相等:" + (biga == bigb));

 Java7曾强了包装类的功能,为所有的包装类都提供了一个静态的compare(xxx val1, xxx val2)方法,这样开发者就可以通过包装类提供的campare(xxx val1, xxx val2)方法来比较两个基本类型值的大小,包括比较两个博哦了安类型值,两个boolean类型值进行比较时,ture>false。


本文参考链接:https://www.cnblogs.com/wgl1995/p/9282977.html