看看这两个语句
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应用import java.util.Scanner; import java.math.... BigInteger m=BigInteger.valueOf(2);//给高精度的数赋值; m=m.pow(n);//Integer类的方法 System.out.print(m.toString()); } } }
licenseNum = nf.format(Integer.valueOf(licenseNum)); String verTime = new StringBuilder("-").append(new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime())).append("0").toString(); String ...
long转int 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出...int ii = Integer.parseInt(String.valueOf(ll)); 这三种方法都比较简单明了。
String.valueOf(item.getStockPrice().multiply(new BigDecimal(item.getStockAmount()))), "01".equals(item.getSalesSource()) ? "线上订单" : "线下订单", item.getGoodsNameAttrs(), String.valueOf(item....
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...
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; ...
float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符串检索 indexOf(Srting s) 从头开始检索 indexOf(String s ,int ...
int nu=Integer.parseInt(String.valueOf(nu2)); while(nu>1){ nu1=nu1*num;nu--;} jt.setText(String.valueOf(nu1)); } j=0; st1=e.getActionCommand(); } }...
n=Integer.valueOf(inputLine).intValue(); } catch (Exception exc) { System.out.println("输入的不是合法的数!"); return; // TODO: handle exception } Shuixianhua2 sxh=new ...
修复建议:使用Integer.valueOf()替代new Integer。 2.switch语句包含太少分支。 修复建议:分支比较少的时候建议使用if else。原因:switch用来处理多分支的情况。 3.Switch语句应该包含一个default。 4.多...
float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符串检索 indexOf(Srting s) 从头开始检索 indexOf(String s ,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)); } }
import java.lang.Integer.parseInt; public class StaticImport { int x = parseInt("123"); System.out.println(x); } 这样的程序如果不在IDE 工具中输入,是很难看出这个程序代码会出现问题,可它偏偏就出问题...
supplierData.put(Integer.valueOf(resultSet.getInt("sup_id")), resultSet.getString("sup_name")); } catch (Exception e) { e.printStackTrace(); } return supplierData;//返回映射关系 } public ...
new TelnetConnectionUtil(SDKNode.nodeVo.getIp(),SDKNode.nodeVo.getPassword(),Integer.valueOf(SDKNode.nodeVo.getPort())); java模拟telnet链接,获取信息,进行各种解析。什么地方开始,什么地方结束。
java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) ... * Integer.valueOf() 、Long.valueOf() * 当数字范围超出, short 1字节 (-128 、+127),生成模式为 new 新对象
int bookNum = Integer.parseInt(request.getParameter(String.valueOf(bookid))); System.out.println(bookNum); //封装成line对象 Line line = new Line(book, bookNum); System.out.println(line); ...
+ String.valueOf(symbol3) + String.valueOf(symbol1); strReturn = myport.sendAT(atCommand); if (strReturn.indexOf("OK") != -1 && strReturn.indexOf("+CMGS") != -1) { System.out.println("短信发送...
Integer count = (Integer) redisService.get("ip-", String.valueOf(sno)); if (count == null) { //一分钟内可以访问三次 redisService.set("ip-", String.valueOf(sno), 1, 1, TimeUnit.MINUTES); }else if ...
int v = ((Integer) evt.getNewValue()).intValue(); if (v ) { isOpen = false; putValue(ACTION_COMMAND_KEY, "Show thumbnails"); putValue(NAME, "Show thumbnails"); } else { isOpen = true; putValue...