请教一个装箱拆箱的问题
下面两段代码
[解决办法]
第二段应该不会快啊,你这个循环有可能直接被编译器优化掉了volatile int i ;
public void haha(){
String a = "abc";
Integer b = 1;
String c = null;
long begin = System.nanoTime();
for( i = 0 ; i < 1000; i ++){
c = a + b;
}
System.out.println(System.nanoTime() - begin);
System.out.println(c);
}
[解决办法]
你的第二段代码, b是个基本数据类型。当在与字符串进行拼接的时候是直接来的,不需要在转化,也就是你说的拆箱。
而你的第一段代码,b是个引用数据类型,每次执行拼接的时候都要,进行拆箱,你说那个慢?
就好像每一次循环第一次比第二次 多做了点事,所以就慢的罗
[解决办法]
个人感觉:1.Integer b = 1;是有个装箱的步骤。2.基本数据类型在于String相加的时候应该是会调用String.valueOf(i);而Integer会执行toString方法,方法的入栈出栈也存在的一定的差异。当然这些只是猜测。
当循环增加到100000000次后与10000次的平均循环时间比其实有降低。
[解决办法]
这个运行时间应该每次都不同才对。不存在严格的第一段比第二段快慢之分。
[解决办法]
应该就是这个原因,int转为String代价更小一些