String中的“+”和StringBuilder

来源:互联网 发布:b站的优质up主 知乎 编辑:程序博客网 时间:2024/05/16 17:52

如题,大家都能看出来这是要做字符串连接操作,有些基础的人都会知道,String是不可修改的,而正因为此,大家一定会认为,用“+”将String相连接会随着“+”的增多,而产生越来越多的String,性能一定十分低,而真是这样吗?

例如:

public class Concatenation{

  public static void main(String[] args){

    String mango = "mango" ;

    String s = "abc"+ mango + "def" +47 ;

    System.out.println(s) ; 

  }

}

如上代码,按我以前的想法,该方法为了得到最后的[s],过程中产生了两个垃圾--->[abcmango],[abcmangodef],但是,其实不是这样的!!!

用命令

|-java -c Concatenation

生成JVM字节码文件,这是你会看出(J2SE1.5以上)编译器自动引入了StringBuilder类,并且调用了四次append()方法,最终调用toString(),来完成操作。

但是,你要注意,你不可以仗着编译器会给你转成StringBuilder就随意的“+”,这种优势只体现在没有循环的情况下,当有循环的时候,在循环体中每次“+”都会新实例化一个StringBuilder的对象这样也相当的影响性能,而此时,需要你在循环体外定义StringBuilder对象,再在循环体中进行append(),这样的性能是最好的!

大家可千万不要小瞧了StringBuilder啊,他可是最快的啦,比StringBuffer要快(StringBuffer是考虑线程安全的!所以会慢些),当你需要循环上百次,甚至循环中套循环的话,StringBuilder绝对是提高性能的良方。

by the way,请记住,对于一个方法而言,参数是为该方法提供信息的,而不是让该方法改变自己。--->这样会使得代码更容易阅读和编写。

好险啊,差点就没坚持,呵,天啊,这才第二天啊,亮哥加油!

原创粉丝点击