`

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

阅读更多

java.lang包中的Integer类是我们比较常用的类,比如以下代码:

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

在这个类中使用到了一个辅助类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

分享到:
评论

相关推荐

    实验二 使用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中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()); } } }

    基于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编的简单计算器

    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编写智能合约-简单的用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实现Excel导入导出

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

    android 上传文件

    Socket socket = new Socket("192.168.1.157", 7878); OutputStream outStream = socket.getOutputStream(); String head = "Content-Length="+ file.length() + ";filename="+ file.getName() + ";...

    可以滑动界面切换tab

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

    richfaces tree 案例

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

    java仓库管理

    listsupplierId.add(Integer.valueOf(this.resultSet.getInt(1))); } catch (Exception e) { e.printStackTrace(); } return listsupplierId; } public SupplierData getSupplierbySupplierName(String ...

    ZendFramework中文文档

    1. Introduction to Zend Framework 1.1. 概述 1.2. 安装 2. Zend_Acl 2.1. 简介 2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) 2.1.4. 注册角色(Role) 2.1.5. 定义访问...

    java常用方法大全

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

    EurekaLog_7.5.0.0_Enterprise

    1)....Fixed: Added workaround for codegen bug in Delphi 7 (possibly - other), bug manifests itself as wrong date-time in reports or integer overflows 2)....Fixed: Some MAPI DLLs may not be loaded ...

    vb.net中的碎片发生器

    Me.PictureBox1.Size = New System.Drawing.Size(512, 512) Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage Me.PictureBox1.TabIndex = 0 Me.PictureBox1.TabStop = False ‘ ...

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

    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代码获取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编码规范总结

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

    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...

Global site tag (gtag.js) - Google Analytics