为什么Java StringBuilder的效率要比String高?
概述
在Java中,字符串拼接很常见,为什么总是说StringBuilder的效率要比String高呢,大概原因就是String是不可变对象,而StringBuilder在拼接时只是把字符串转为char拷贝到char[]。具体如下
String不可变
String对象不可变,则每次拼接都会创建新的String对象。即使在新的jdk有对String+
的优化,仍然是效率不够高,比如每次循环拼接时都会被自动创建一个StringBuider对象来append,最后还会将该对象调用toString()方法。
具体优化方法,可以对代码编译后使用javap
命令查看生成的字节码指令。
StringBuilder效率高
StringBuilder其实就是个char[],append时,是将String对象转为char后放入StringBuilder的char[]内。当长度不够放时,对该char[]扩容即可。