可能重复:
java String concatenation
StringBuilder vs String concatenation in toString() in Java
我读过一些关于append()的文章比+快得多,但是原因是什么,为什么我们会使用+ over append()呢?谢谢!
答案 0 :(得分:6)
+
创建新的中间String
对象,因为Java中的字符串为immutable,而StringBuffer
的{{1}}对同一字符串起作用,这就是为什么它被认为更快。但是,您应该在病房中使用java 5中的append()
,因为据说它比StringBuilder
更快,因为它的方法不像StringBuffer那样StringBuffer
。
这是高层次的理论解释。有关更具体的详细信息,请查看String concatenation: concat() vs "+" operator帖子。
答案 1 :(得分:2)
如果你的代码没有在循环中执行数千次,那么+是完全可以的。规则的例外,一个不断增长的字符串,一遍又一遍地重新分配内存:
// fine:
for (customer: list)
System.out.println ("Customer: " + customer);
// prolematic for bigger lists:
for (word: list)
chain += word;
有100个长度为50的单词,你的长度最终为50,100,150,... 5000 - 总共250 000个字符,垃圾收集工作量很大。
答案 2 :(得分:1)
只连接2个字符串(无循环)然后使用+通常更快。 如果你加入超过2个字符串,那么append()会更快。
不同之处在于字符串缓冲区在内部使用char []并在该数组中有额外的(空闲)空间来放入新的附加内容(如果数组太小,则数组会增长)。 +运算符实际上必须创建一个正确长度的新字符串,然后将左侧和右侧复制到其中。
答案 3 :(得分:1)
如果您正在为JDK 1.5或更高版本进行编译,则连接将变为StringBuilder,而不是StringBuffer。 StringBuilder针对局部变量的连接进行了优化(即,它是无锁的)。所以Greg Mattes上面提到的链接可能是你真正想问的问题。