“+”真的可以替代StringBuilder吗

最近在头条上看到一篇帖子,说Java8开始,字符串拼接时,“+”会被编译成StringBuilder,所以,字符串的连接操作不用再考虑效率问题了,事实真的是这样吗?要搞明白,还是要看看Java编译后的字节码。

先比较这样两段代码。最简单的字符串拼接,一个用“+”,一个用StringBuilder。

    public void useOperator(){
        String a = "abc";
        String b = "efg";
        String c = a + b;
        System.out.println(c);
    }
    public void useStringBuilder(){
        String a = "abc";
        String b = "efg";
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(a);
        stringBuilder.append(b);
        System.out.println(stringBuilder.toString());
    }

用javap去看这个代码的字节码,如下:

  public void useOperator();
    Code:
       '''a和b分别被存储到局部变量1和2中'''
       0: ldc           #2                  // String abc
       2: astore_1
       3: ldc           #3                  // String efg
       5: astore_2
       '''"+"被转为StringBuilder'''
       6: new        

猜你喜欢

转载自blog.csdn.net/bdmh/article/details/103805982