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<i<=127时,Integer.valueOf返回的是同一个对象。

看下面代码:Integer a=new Integer(1);   
    Integer b=new Integer(1);   
      
    //整数范围在-128到127之间,返回的是同一个对象   
    Integer c=Integer.valueOf(1);   
    Integer d=Integer.valueOf(1);   
      
    //返回的不是同一个对象   
    Integer e=Integer.valueOf(200);   
    Integer f=Integer.valueOf(200);   
      
    System.out.println(a==b);   
    System.out.println(c==d);   
    System.out.println(e==f);
    
      程序运行的结果为:
        false
        true
        false
      结论:在没有对Integer创建有特殊要求时,比如纯数字计算或比较,最好用Integer.valueOf。 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值