美文网首页
String.valueOf(1) 和 1+"&qu

String.valueOf(1) 和 1+"&qu

作者: 乱世小民 | 来源:发表于2018-03-07 11:02 被阅读12次

    今天修改项目中之前别人的代码,前人使用Int或者long转换成String都用的String.valueOf,我自己习惯拼接个空字符串。改完之后我就有个疑问,这两个有什么区别?哪个性能好点之类的?既然有疑问,那就行动证明下。

    首先想到的是反编译:

    1. 写个简单的测试类,如下:
    image.png
    2. 编译成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

    相关文章

      网友评论

          本文标题:String.valueOf(1) 和 1+"&qu

          本文链接:https://www.haomeiwen.com/subject/dvzdfftx.html