在上面的例子中“a”、“b”、“c”、“d”都应该会首先在常量池中分配空间吧,这样上面两端代码就应该差不多啊但为什么是第一段代码效率更高呢?求解释
而str + "a" 会创建一个新的String对象就慢了。你要知道String对象一旦创建就是不能被改变的要达到字符串拼接的效果,就得不停创建新对象
StringBuilder直到最后sb.toString()才会创建String对象,之前都没有创建新对象(在你的例子中是的但是如果你append的总长度超过一定范围——默认是16——就会创建一个新的数组,来装下哽多的String)
JAVA中创建的String是不是都是放常量池中啊比如sb.append("a")中的“a”是不是在常量池中占了空间的啊?
不止每次String变动,还会重现創建String对象而创建新的对象时,有可能会触发GC
比自己调用append费事多了
个人理解和1楼差不多,"ab"在"a"+"b"的时候是新建的
楼上回答挺详细的差不多叻。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。