String.valueOf(1) 和 1+"&qu
2018-03-07 本文已影响12人
乱世小民
今天修改项目中之前别人的代码,前人使用Int或者long转换成String都用的String.valueOf,我自己习惯拼接个空字符串。改完之后我就有个疑问,这两个有什么区别?哪个性能好点之类的?既然有疑问,那就行动证明下。
首先想到的是反编译:
1. 写个简单的测试类,如下:
image.png2. 编译成class文件 javac Test.java
3.javap反编译 javap -c Test.class
得到结果如下:
image.png
下面我们分析下:
第一种方式 1 + “” :当执行这种操作的时候,因为1和""("xyz"等字符串一样)都是常量,作用编译器自动帮我们优化成拼接后的字符串常量,我们上面的就是String类型的1。
第二种方式String.valueOf():调用了String的静态方法valueOf。因为调用方法的指令操作,所有相当于第一种方式效率肯定会差点。对于现代计算机的能力来说,量到达一定大的时候,才会有点效果吧。普通使用几乎可以忽略吧。
第三种方式:先定义一个字符串,然后执行”+“的操作。通过反编译可以看到,虚拟机帮我们调用了StringBuilder的apped(),最后调用了toString()的方法。这种也没有什么好说的。但是有个使用技巧:在循环中(特别量比较大的),推荐自己使用StringBuilder,而不是通过“+”的方式拼接字符串。原因就是如果用“+”的方式,每次的循环中,虚拟机都会初始化StringBuilder一次,如果我们自己使用StringBuilder的话,只需要在外面初始化一次就可以了。
image.png