Integer的两个对比valueOf和new Integer()

Integer a=new Integer(1) 

Integer a=Integer.valueOf(1); 

两个都是得到一个Integer对象,但是Integer.valueOf的效率高。为什么呢?因为Integer.valueOf用到了缓存。看看Integer.valueOf的代码: 

 

Integer.valueOf()方法实现如下: 

Java代码  
  1. public static Integer valueOf(int i) {  
  2.     final int offset = 128;  
  3.     if (i >= -128 && i <= 127) { // must cache   
  4.         return IntegerCache.cache[i + offset];  
  5.     }  
  6.     return new Integer(i);  
  7. }  


Integer.valueOf()方法基于减少对象创建次数和节省内存的考虑,缓存了[-128,127]之间的数字。此数字范围内传参则直接返回缓存中的对象。在此之外,直接new出来。 
IntegerCache的实现: 

Java代码  
  1. private static class IntegerCache {  
  2.     private IntegerCache(){}  
  3.     static final Integer cache[] = new Integer[-(-128) + 127 + 1];  
  4.     static {  
  5.         for(int i = 0; i < cache.length; i++)  
  6.         cache[i] = new Integer(i - 128);  
  7.     }  
  8. }  


测试代码 

Java代码  
  1. Integer i1 = Integer.valueOf(8);  
  2. Integer i2 = Integer.valueOf(8);  
  3. Integer i3 = Integer.valueOf(1000);  
  4. Integer i4 = Integer.valueOf(1000);  
  5. System.out.println(i1==i2);  
  6. System.out.println(i3==i4);  
  7. System.out.println(i1.equals(i2));  
  8. System.out.println(i3.equals(i4));  


打印结果如下: 

Java代码  
    1. true  
    2. false  
    3. true  
    4. true  
posted @ 2017-02-15 20:29  迈阿密大腮帮  阅读(1022)  评论(0编辑  收藏  举报