可能重复:
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);
答案 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)
由于编译器优化,它可能会或可能不会对您的应用产生任何影响。你必须运行比较速度测试才能看到。
但是在你沉迷于表现之前,让程序正常运作。 “过早的优化是万恶之源。”