如题,大家都能看出来这是要做字符串连接操作,有些基础的人都会知道,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,请记住,对于一个方法而言,参数是为该方法提供信息的,而不是让该方法改变自己。--->这样会使得代码更容易阅读和编写。
好险啊,差点就没坚持,呵,天啊,这才第二天啊,亮哥加油!