为什么使用append()而不是+

时间:2010-12-02 16:32:28

标签: java append

  

可能重复:
  Why to use StringBuffer in Java instead of the string concatenation operator

这样做的优点或目的是什么

int a= 42
StringBuffer sb = new StringBuffer(40); 
String s = sb.append("a = ").append(a).append("!").toString(); 
System.out.println(sb);

结果> a = 42!

而不是

 int a= 42
 String s = "a = " + a + "!"; 
 System.out.println(sb);

5 个答案:

答案 0 :(得分:1)

效率。 Java中的字符串连接无论如何都在后台使用StringBuilders,因此在某些情况下,您可以通过自己控制来提高效率。

答案 1 :(得分:1)

在你的场景中,我不确定b / c你的所有“+”是否在一行上(只创建一次String)。但是,一般情况下,字符串是不可变对象,并且不是真正操作的,而是使用StringBuffers创建和丢弃。

最终,如果您使用StringBuffers(通常是StringBuilders),您将拥有更高效的代码。如果您使用谷歌“String vs. StringBuffer vs. StringBuilder”,您可以找到许多详细说明统计数据的文章。

答案 2 :(得分:0)

只需运行10000次代码并测量时间。这应该是显而易见的。 一些背景信息:String是不可变的,而StringBuilder则不是。因此,每次连接String时,都必须复制一个数组。

PS:有时编译器会对事情进行优化。也许如果你使你的变量静态最终,它将只是一个内部的字符串,没有连接。

答案 3 :(得分:0)

首先,StringBuffer是同步的,因此通常使用StringBuilder。 +已经重新实现,以便在不久前使用StringBuilder。

其次,正如@Riggy所说,只要Java出现在单个表达式中,它实际上会优化+。但如果你这样做:

String s = "";
s += a;
s += b;
s += c;
s += d;

然后有效代码将成为:

String s ="";
s = new StringBuilder(s).append(a).toString();
s = new StringBuilder(s).append(b).toString();
s = new StringBuilder(s).append(c).toString();
s = new StringBuilder(s).append(d).toString();

是次优的 String s = new StringBuilder(s).append(a).append(b).append(c).append(d).toString();

答案 4 :(得分:0)

由于编译器优化,它可能会或可能不会对您的应用产生任何影响。你必须运行比较速度测试才能看到。

但是在你沉迷于表现之前,让程序正常运作。 “过早的优化是万恶之源。”