`
zjf201172653
  • 浏览: 45474 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java Integer.ValueOf(int)和new Integer(int)性能比较

阅读更多

 

java Integer.ValueOf(int)和new Integer(int)性能比较     

转自   http://blog.csdn.net/zhongweijian/article/details/5317375

 

JDK的源码,看看到Integer.ValueOf(int)里面做了什么优化:

 

  1. 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. }   
  8.   
  9. private static class IntegerCache {  
  10.   private IntegerCache(){}  
  11.       
  12.   static final Integer cache[] = new Integer[-(-128) + 127 + 1];  
  13.   static {  
  14.   for(int i = 0; i < cache.length; i++)  
  15.      cache = new Integer(i - 128);  
  16.   }  
  17. }   

从源代码可以知道,ValueOf对-128~127这256个值做了缓存(IntegerCache),如果int值的范围是:-128~127,在ValueOf(int)时,他会直接返回IntegerCache的缓存给你。

 

public static void main(String []args) {  
         Integer a = 10;  
         Integer b = 10;  
         System.out.println(a==b);  
         Integer c = new Integer(10);  
         Integer d = new Integer(10);  
         System.out.println(c==d);
         
         Integer e = 200;
         Integer f = 200;
         System.out.println(e == f);
    }

 

结果是:

true
false

false

因为:java在编译的时候 Integer a = 10; 被翻译成-> Integer a = Integer.valueOf(10);,所以a和b得到都是一个Cache对象,并且是同一个!而c和d是新创建的两个不同的对象,所以c自然不等于d。然而,当数据超出-128~127范围时,就不会先做Integer e = Integer.valueOf(200)这样的操作了。

分享到:
评论

相关推荐

    JAVA试题——初级

    适合应届生的java试题,很简单,但有些地方容易出错,请不要眼高手低。

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

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

    将 BigDecimal 类型转换为 Integer 类型.pdf

    当 BigDecimal 值大于 Integer.MAX_VALUE 时,intValue() 方法将抛出 java.lang.ArithmeticException 异常。例如,在上面的示例代码中,若输入的 BigDecimal 值为 2147483648 时,intValue() 方法将抛出“Out of ...

    实验二 使用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....

    PKCard 2

    Java实现蜘蛛纸牌

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

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

    Java常用方法大全

    int型 Integer.parseInt(字符串) long型 Long.parseLong(字符串) float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符...

    java常用方法大全

    int型 Integer.parseInt(字符串) long型 Long.parseLong(字符串) float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符...

    java中数据类型转换

    java中数据类型转换 收藏 java中数据类型转换 1如何将字串 String 转换成整数 int? A.... int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异.

    java函数大全

    int型 Integer.parseInt(字符串) long型 Long.parseLong(字符串) float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符...

    Android实验4

    public int compare_130(int a,int ... String msg = String.valueOf(a) + " compare with " + String.valueOf(b) + ",the " + String.valueOf(result)+" is bigger"; labelView.setText(msg); } });

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

    Android实验动态生成数

    动态生成数的运用 ... String msg = String.valueOf(a) + " compare with " + String.valueOf(b) + ",the " + String.valueOf(result)+" is bigger"; labelView.setText(msg); } });

    Java String转int还有其它几种写法.docx

    第一种,使用 Integer.valueOf(),它将返回一个包装器类型 Integer,当然可以通过自动拆箱的方式将其转成 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实现Excel导入导出

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

    Java 用法明细介绍

    int型 Integer.parseInt(字符串) long型 Long.parseLong(字符串) float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符...

    java仓库管理

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

    MD5加密与byte数组与16进制相互转换

    包含MD5加密,同时拥有多种方式进行byte或者byte[]与16...方式一:Integer.toHexString(int) 对应的是: Integer.parseInt(String, int)或者Integer.valueOf(String, int) 方式二:位运算(& 与 |) 方式三:算术运算

Global site tag (gtag.js) - Google Analytics