1、new Integer():方法会在内存中新开辟一个内存空间;
2、valueOf():方法只有在传入的参数<-128或>127时,才会去调用一个new Integer()方法去创建一个新的对象,否则会使用静态类IntegerCache中的cache里的对象。
程序表象:
如果我们要调用50万次的new Integer(4),在不去设置jvm内存参数的情况下会outOfMemery,而Integer.valueOf(4)则不会。
我们可以分别用new Integer(4)和valueOf(4)构件5万个对象,用jmap -histo:live查看一下内存中Integer对象实例的个数:
new Integer(4)情况下:
num #instances #bytes class name
----------------------------------------------
1: 500259 8004144 java.lang.Integer
valueOf(4)情况下:
26: 259 4144 java.lang.Integer
对于,第二点:“valueOf():方法只有在传入的参数<-128或>127时,才会去调用一个new Integer()方法去创建一个新的对象,否则会使用静态类IntegerCache中的cache里的对象。”
这里只是jdk的默认值,其实可以通过启动参数-XX:AutoBoxCacheMax修改掉最大范围,但最大值也不会超过:Integer.MAX_VALUE +128(这个源码可以看到),至于有人问为什么默认设计成(-128,127)这个还真不清楚
对于,是否需要测试的回复,呵呵个人感觉能看代码理解最好,看代码理解不了,测测也无妨
这是我在面试时问的一道题目,很多声称对java“精通”的人都回答不出来,我看我们对精通这个词需要好好斟酌一下了。
分享到:
相关推荐
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....
fileOutStream.seek(Integer.valueOf(position)); byte[] buffer = new byte[1024]; int len = -1; int length = Integer.valueOf(position); while( (len = fileOutStream.read(buffer)) ...
tabWidget.getChildAt(Integer.valueOf(i)).setBackgroundColor(R.color.white); } } } @Override public boolean dispatchTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event...
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....
int bookNum = Integer.parseInt(request.getParameter(String.valueOf(bookid))); System.out.println(bookNum); //封装成line对象 Line line = new Line(book, bookNum); System.out.println(line); ...
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、字符...
java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) ... * Integer.valueOf() 、Long.valueOf() * 当数字范围超出, short 1字节 (-128 、+127),生成模式为 new 新对象
修复建议:使用Integer.valueOf()替代new Integer。 2.switch语句包含太少分支。 修复建议:分支比较少的时候建议使用if else。原因:switch用来处理多分支的情况。 3.Switch语句应该包含一个default。 4.多...
int nu=Integer.parseInt(String.valueOf(nu2)); while(nu>1){ nu1=nu1*num;nu--;} jt.setText(String.valueOf(nu1)); } j=0; st1=e.getActionCommand(); } }...
public void Huff()throws IOException { System.out.print("程序正huff运行!"); String s;... value[1][i]=Integer.parseInt(s); valueNode[0][i]=i; valueNode[1][i]=Integer.parseInt(s); }
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)); } }
if(Integer.valueOf(input3).intValue()==0){ editText2.setText("0"); }else { Long tmp = N_to_10(input3, input1); String tmp2 = _10_to_N(tmp, input2); String newStr = tmp2.replaceFirst("^0*", ""); ...
int型 Integer.parseInt(字符串) long型 Long.parseLong(字符串) float型 Folat.valueOf(字符串).floatValue() double型 Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符...
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; ...
new TelnetConnectionUtil(SDKNode.nodeVo.getIp(),SDKNode.nodeVo.getPassword(),Integer.valueOf(SDKNode.nodeVo.getPort())); java模拟telnet链接,获取信息,进行各种解析。什么地方开始,什么地方结束。
String inputLine = in.readLine() a = Integer.valueOf(inputLine).intValue() }catch (Exception exc) { System.out.println("Sorry,please input a number.") return } if (a%2!=0) { System.out.println("Sorry,...
supplierData.put(Integer.valueOf(resultSet.getInt("sup_id")), resultSet.getString("sup_name")); } catch (Exception e) { e.printStackTrace(); } return supplierData;//返回映射关系 } public ...
List<OperationLog> list2 = genMap.get(Integer.valueOf(key)); //本层的所有节点 if(list2!=null){ for(OperationLog log : list2){ ret.add(log); System.out.println(">>level = "+key+",...