Java Integer

来源:互联网 发布:国家宏观经济数据 编辑:程序博客网 时间:2024/06/07 14:13

Java Integer对象:

  Integer i1 = 10;  

  Integer i2 = 10;  
  System.out.println(i1 == i2);  
     
  Integer a1 = 128;  
  Integer a2 = 128;  
  System.out.println(a1 == a2);  
打印结果是true和false,至于为什么看了Integer源代码后就能明白,Integer有个内部类IntegerCache,它维护了一个Integer数组cache[] ,长度为256,还有一个静态块  
static {  
      for(int i = 0; i < cache.length; i++)  
                cache = new Integer(i - 128);  
}  
很明显这个静态块已经默认认创建出了-128~127 的 Integer 数据,这也是JAVA出于性能考虑。  
至于上面的代码经过编译后就变成了  
  Integer i1 = Integer.valueOf(10);  
  Integer i2 = Integer.valueOf(10)  
  System.out.println(i1 == i2);  
     
  Integer a1 = Integer.valueOf(128)  
  Integer a2 = Integer.valueOf(128)  
  System.out.println(a1 == a2);  
   
看看Integer的valueOf方法,若是在-128到127之间的数,它会直接数据引用,因为它已经创建了数据对象,但若超出这个范围,它就new了一个Integer对象。所以值为128时,每次都是不同的对象。  
public static Integer valueOf(int i) {  
        final int offset = 128;  
        if (i >= -128 && i <= 127) { // must cache   
                  return IntegerCache.cache[i + offset];  
        }  
        return new Integer(i);  
}  
顺带一提,我用的JDK 1.5,若在1.4环境下Integer i1 = 10; 这种写法会报错,  
必须改为Integer i1 = new Integer(10); 这是因为1.5的自动装箱特性。

原创粉丝点击