new Integer(1)和Integer.valueOf(1)的区别

   1. java.lang包中的Integer类是我们比较常用的类,比如以下代码: 
                      Integer a=new Integer(1)

                      Integer a=Integer.valueOf(1);
    
    两个都是得到一个Integer对象;但是Inter.valueOf  的效率更高,Inter.valueOf  用到了缓存机制。
    
 其中Integer.valueOf方法代码如下:

 1. 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);
        }
        在这个类中使用到了一个辅助类IntegerCache,IntegerCache的源码为:
        
        private static class IntegerCache {
        private IntegerCache(){}
        static final Integer cache[] = new Integer[-(-128) + 127 + 1];
        static {
         for(int i = 0; i < cache.length; i++)
         cache[i] = new Integer(i - 128);
               }
          }

  可以看到在IntegerCache中已经初始化了cache数组。所以,要注意的是,    new Integer返回的永远是不同的对象,但是当整数范围在-128

你可能感兴趣的:(new Integer(1)和Integer.valueOf(1)的区别)