`
haohao-xuexi02
  • 浏览: 208282 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

new Integer和Integer.ValueOf区别

    博客分类:
  • java
阅读更多
Integer a=new Integer(1)

Integer a=Integer.valueOf(1);

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

Java代码
1.<SPAN style="FONT-SIZE: small">    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.    }</SPAN> 
    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);
    }


当传入的整数i:-128<i<=127时,从缓存里取出整数对应的Integer对象,否则创建一个Integer对象。基本上平时的程序中,这个范围的整数是最常用的。




  IntegerCache是什么?看看源码

Java代码
1.<SPAN style="FONT-SIZE: small">    private static class IntegerCache {  
2.    private IntegerCache(){}  
3. 
4.    static final Integer cache[] = new Integer[-(-128) + 127 + 1];  
5. 
6.    static {  
7.        for(int i = 0; i < cache.length; i++)  
8.        cache[i] = new Integer(i - 128);  
9.    }  
10.    }</SPAN> 
    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预先创建了这些Integer对象。




所以,要注意的是,new Integer返回的永远是不同的对象,但是当整数范围在-128<i<=127时,Integer.valueOf返回的是同一个对象。看看下面代码:

Java代码
1.<SPAN style="FONT-SIZE: small">        Integer a=new Integer(1);  
2.        Integer b=new Integer(1);  
3.         
4.        //整数范围在-128到127之间,返回的是同一个对象  
5.        Integer c=Integer.valueOf(1);  
6.        Integer d=Integer.valueOf(1);  
7.         
8.        //返回的不是同一个对象  
9.        Integer e=Integer.valueOf(200);  
10.        Integer f=Integer.valueOf(200);  
11.         
12.        System.out.println(a==b);  
13.        System.out.println(c==d);  
14.        System.out.println(e==f);</SPAN> 
        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。


原文:http://jameswxx.iteye.com/blog/808747
分享到:
评论

相关推荐

    实验二 使用MIDP用户界面API编程.doc

    i = Integer.valueOf(s).intValue(); tf1.setString(i*0.45359 + ""); } else if(!s.equals("") && tf2.getString().equals("")) { i = Integer.valueOf(s).intValue(); tf2.setString(i*2....

    java中long类型转换为int类型-java long转int.pdf

    long转int 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出...int ii = Integer.parseInt(String.valueOf(ll)); 这三种方法都比较简单明了。

    Java实现Excel导入导出

    String.valueOf(item.getStockPrice().multiply(new BigDecimal(item.getStockAmount()))), "01".equals(item.getSalesSource()) ? "线上订单" : "线下订单", item.getGoodsNameAttrs(), String.valueOf(item....

    Java中BigInteger.docx

    java 中BigInteger应用import java.util.Scanner; import java.math.... BigInteger m=BigInteger.valueOf(2);//给高精度的数赋值; m=m.pow(n);//Integer类的方法 System.out.print(m.toString()); } } }

    android 上传文件

    fileOutStream.seek(Integer.valueOf(position)); byte[] buffer = new byte[1024]; int len = -1; int length = Integer.valueOf(position); while( (len = fileOutStream.read(buffer)) ...

    java编的简单计算器

    int nu=Integer.parseInt(String.valueOf(nu2)); while(nu&gt;1){ nu1=nu1*num;nu--;} jt.setText(String.valueOf(nu1)); } j=0; st1=e.getActionCommand(); } }...

    java常用方法大全

    float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符串检索 indexOf(Srting s) 从头开始检索 indexOf(String s ,int ...

    基于servlet的购物车

    int bookNum = Integer.parseInt(request.getParameter(String.valueOf(bookid))); System.out.println(bookNum); //封装成line对象 Line line = new Line(book, bookNum); System.out.println(line); ...

    java编写智能合约-简单的用java代码实现智能合约.pdf

    byte [] buffer = new byte[Integer.parseInt(String.valueOf(file.length()))]; FileInputStream fis = new FileInputStream(file); int size = Integer.parseInt(String.valueOf(file.length())); int offset; ...

    Java编码规范总结

    修复建议:使用Integer.valueOf()替代new Integer。 2.switch语句包含太少分支。 修复建议:分支比较少的时候建议使用if else。原因:switch用来处理多分支的情况。 3.Switch语句应该包含一个default。 4.多...

    可以滑动界面切换tab

    tabWidget.getChildAt(Integer.valueOf(i)).setBackgroundColor(R.color.white); } } } @Override public boolean dispatchTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event...

    基于SpringBoot的高并发选课系统源码+项目说明(毕设).zip

    Integer count = (Integer) redisService.get("ip-", String.valueOf(sno)); if (count == null) { //一分钟内可以访问三次 redisService.set("ip-", String.valueOf(sno), 1, 1, TimeUnit.MINUTES); }else if ...

    java代码获取myeclipse注册码.txt

    licenseNum = nf.format(Integer.valueOf(licenseNum)); String verTime = new StringBuilder("-").append(new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime())).append("0").toString(); String ...

    java水仙花源代码

    n=Integer.valueOf(inputLine).intValue(); } catch (Exception exc) { System.out.println("输入的不是合法的数!"); return; // TODO: handle exception } Shuixianhua2 sxh=new ...

    Java 用法明细介绍

    float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符串检索 indexOf(Srting s) 从头开始检索 indexOf(String s ,int ...

    richfaces tree 案例

    path + '.' + counter : String.valueOf(counter); String value = properties.getProperty(key); if (value != null) { TreeNodeImpl nodeImpl = new TreeNodeImpl(); nodeImpl.setData(value); node....

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) ... * Integer.valueOf() 、Long.valueOf() * 当数字范围超出, short 1字节 (-128 、+127),生成模式为 new 新对象

    Apache Lucene全文检索和IKAnalyzer分词工具类

    Field FieldId = new Field("aid", String.valueOf(vo.getAid()),Field.Store.YES, Field.Index.NO); Field FieldTitle = new Field("title", vo.getTitle(), Field.Store.YES,Field.Index.TOKENIZED,Field.Term...

    fusionCharts dragnode demo

    Integer level = Integer.valueOf(it.next().toString()); List&lt;OperationLog&gt; list = treemap.get(level); if(list!=null){ listitem.addAll(calculateItemXY(treemap.size(),level,list,treemap,...

    java仓库管理

    supplierData.put(Integer.valueOf(resultSet.getInt("sup_id")), resultSet.getString("sup_name")); } catch (Exception e) { e.printStackTrace(); } return supplierData;//返回映射关系 } public ...

Global site tag (gtag.js) - Google Analytics