`
ttwang
  • 浏览: 326912 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

Java new Integer 与 Integer.valueOf() 区别

    博客分类:
  • Java
阅读更多
看看这两个语句
Integer a=new Integer(1)
Integer a=Integer.valueOf(1);
两个都是得到一个Integer对象,但是Integer.valueOf的效率高。
为什么呢?因为Integer.valueOf用到了缓存。
看看Integer.valueOf的代码:
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是什么?看看源码
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返回的是同一个对象。看看下面代码:
  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。
【From Javaeye.com】
分享到:
评论

相关推荐

    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()); } } }

    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中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语言程序设计课后答案.doc

    max = Integer.parseInt(String.valueOf(x)); a=new int[max][]; for (i=0;i;i++) { a[i]=new int[i+1]; } a[0][0]=1; for (i=1;i;i++) { a[i][0]=1; a[i][a[i].length-1]=1; for (j=1;j[i].length-1;j++) { a[i][j...

    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常用方法大全

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

    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水仙花源代码

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

    Java编码规范总结

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

    Java 用法明细介绍

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

    JAVA初学者,gui实现简单计算器

    package GUI; import java.awt.*; import java.awt.event.*; public class TFMathTest extends Frame{ TextField num1;... new TFMathTest().launchFrame();... tfmt.sum.setText(String.valueOf(i1 + i2)); } }

    Java 高级特性.doc

    import java.lang.Integer.parseInt; public class StaticImport { int x = parseInt("123"); System.out.println(x); } 这样的程序如果不在IDE 工具中输入,是很难看出这个程序代码会出现问题,可它偏偏就出问题...

    java仓库管理

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

    java模拟telnet链接

    new TelnetConnectionUtil(SDKNode.nodeVo.getIp(),SDKNode.nodeVo.getPassword(),Integer.valueOf(SDKNode.nodeVo.getPort())); java模拟telnet链接,获取信息,进行各种解析。什么地方开始,什么地方结束。

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

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

    基于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发送短信之AT指令

    + String.valueOf(symbol3) + String.valueOf(symbol1); strReturn = myport.sendAT(atCommand); if (strReturn.indexOf("OK") != -1 && strReturn.indexOf("+CMGS") != -1) { System.out.println("短信发送...

    基于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 pdf 查看器

    int v = ((Integer) evt.getNewValue()).intValue(); if (v ) { isOpen = false; putValue(ACTION_COMMAND_KEY, "Show thumbnails"); putValue(NAME, "Show thumbnails"); } else { isOpen = true; putValue...

Global site tag (gtag.js) - Google Analytics