阿里巴巴Java开发手册:for循环里拼接字符串为何最好用StringBuilder?

前言

以前在看到一篇文章,说到for循环里拼接字符串最好用StringBuilder,而不是String+=“”,联想到读过的《阿里巴巴Java开发手册》也有相似的说辞。但那是看了以后没再深究,因此借这篇文章深刻分析一下为何for循环里拼接字符串为何最好用StringBuilder?java

举例

平时写代码的时候,咱们常常会遇到在一个循环里去拼接字符串,为了追求效率,不少人会直接写上以下的代码:bash

public static void main(String[] args) {
        String s= "" ;
        for(int i=1;i<10;i++){
            s+=i;
        }
        System.out.println(s);
    }
复制代码

分析

根据《阿里巴巴开发手册》里的说法,这种写法通常会引发空间浪费问题。下面仔细说下为何会引发这类问题。并发

  • 使用字节码工具在cmd里执行
    javac Test.java
    javap -c Test.class

能够大概看出在11行的时候new了一个java.lang.StringBuilder的对象,其余就是一些操做数栈到变量,变量到操做数栈的赋值过程。想要看懂相应字节码表明的意思,能够参考文章: Java生成字节码的意思
若是还不够直观,能够看下面的方式。app

  • 使用jad工具反编译代码

这里就能够更明显地看出其实每次循环的时候都会去new一个StringBuilder对象,而后再toString,最后赋值给s工具

总结

  1. 在单线程少并发的状况下,尽可能用StringBuilder代替简单粗暴的+=,减小新生成对象的空间浪费。
  2. +=其实是java语言提供给String类型的语法糖,其实现原理是使用StringBuilder.append。
相关文章
相关标签/搜索