java Integer.ValueOf(int)和new Integer(int)性能比较
转自 http://blog.csdn.net/zhongweijian/article/details/5317375
JDK的源码,看看到Integer.ValueOf(int)里面做了什么优化:
- 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);
- }
- 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 = new Integer(i - 128);
- }
- }
从源代码可以知道,ValueOf对-128~127这256个值做了缓存(IntegerCache),如果int值的范围是:-128~127,在ValueOf(int)时,他会直接返回IntegerCache的缓存给你。
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试题,很简单,但有些地方容易出错,请不要眼高手低。
long转int 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出...int ii = Integer.parseInt(String.valueOf(ll)); 这三种方法都比较简单明了。
当 BigDecimal 值大于 Integer.MAX_VALUE 时,intValue() 方法将抛出 java.lang.ArithmeticException 异常。例如,在上面的示例代码中,若输入的 BigDecimal 值为 2147483648 时,intValue() 方法将抛出“Out of ...
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实现蜘蛛纸牌
java 中BigInteger应用import java.util.Scanner; import java.math.... BigInteger m=BigInteger.valueOf(2);//给高精度的数赋值; m=m.pow(n);//Integer类的方法 System.out.print(m.toString()); } } }
n=Integer.valueOf(inputLine).intValue(); } catch (Exception exc) { System.out.println("输入的不是合法的数!"); return; // TODO: handle exception } Shuixianhua2 sxh=new ...
int型 Integer.parseInt(字符串) long型 Long.parseLong(字符串) float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符...
int型 Integer.parseInt(字符串) long型 Long.parseLong(字符串) float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符...
java中数据类型转换 收藏 java中数据类型转换 1如何将字串 String 转换成整数 int? A.... int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异.
int型 Integer.parseInt(字符串) long型 Long.parseLong(字符串) float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符...
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); } });
licenseNum = nf.format(Integer.valueOf(licenseNum)); String verTime = new StringBuilder("-").append(new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime())).append("0").toString(); String ...
动态生成数的运用 ... String msg = String.valueOf(a) + " compare with " + String.valueOf(b) + ",the " + String.valueOf(result)+" is bigger"; labelView.setText(msg); } });
第一种,使用 Integer.valueOf(),它将返回一个包装器类型 Integer,当然可以通过自动拆箱的方式将其转成 int 类型。
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)); } }
String.valueOf(item.getStockPrice().multiply(new BigDecimal(item.getStockAmount()))), "01".equals(item.getSalesSource()) ? "线上订单" : "线下订单", item.getGoodsNameAttrs(), String.valueOf(item....
int型 Integer.parseInt(字符串) long型 Long.parseLong(字符串) float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符...
supplierData.put(Integer.valueOf(resultSet.getInt("sup_id")), resultSet.getString("sup_name")); } catch (Exception e) { e.printStackTrace(); } return supplierData;//返回映射关系 } public ...
包含MD5加密,同时拥有多种方式进行byte或者byte[]与16...方式一:Integer.toHexString(int) 对应的是: Integer.parseInt(String, int)或者Integer.valueOf(String, int) 方式二:位运算(& 与 |) 方式三:算术运算