这不好吗?
(想象它更大)
int count;
//done something to count
String myString = "this " + "is " + "my " + "string" + "and " + this.methodCall() + " answer " + "is : " + count;
还是在StringBuilder / StringBuffer中更好?
答案 0 :(得分:31)
Java编译器会将其转换为StringBuilder以提高重复字符串连接的性能。 http://java.sun.com/docs/books/jls/third%5Fedition/html/expressions.html#15.18.1.2
当你在循环中连接时,编译器不能单独替换StringBuilder,而是应该从串联到StringBuilder考虑。
答案 1 :(得分:5)
不,没关系。如果使用Sun的Java 6编译器,它实际上将使用StringBuilder。
阅读此article
答案 2 :(得分:4)
StringBuffer的Javadoc来自Java 5.0
StringBuilder类通常应优先于此使用,因为它支持所有相同的操作,但速度更快,因为它不执行同步。
编译器将结合字符串文字,使其与编写
相同String myString = "this is my stringand " + this.methodCall() + " answer is : " + count;
与
相同String myString = new StringBuilder().append("this is my stringand ").append(methodCall()).append(" answer is : ").append(count).toString();
除非你需要消除系统中的垃圾,否则我不担心性能,在这种情况下你不会在这里使用字符串。 (你不太可能担心它)
答案 3 :(得分:3)
如果您使用StringBuilder
/ StringBuffer
(根据您的应用程序线程模型选择),它会更强可读
如果你写
String str = "abc";
str+="def";
在内部,它会为同一个
创建StringBuilder
7: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
10: aload_1
11: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
14: ldc #6; //String def
16: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
22: astore_1
答案 4 :(得分:2)
(想象它更大)......
使用“+”运算符进行字符串连接会创建许多临时字符串 对象并增加垃圾收集。使用StringBuffer类 效率更高。
更多信息:http://www.ibm.com/developerworks/websphere/library/bestpractices/string_concatenation.html
StringBuffer strBuf = new StringBuffer();
strBuf.append("this");
strBuf.append("is");
strBuf.append("my");
strBuf.append("string");
strBuf.append("and");
strBuf.append(this.methodCall());
strBuf.append(" answer ");
strBuf.append("is : ");
strBuf.append(count);
答案 5 :(得分:2)
Relatively new article with graph,显示与'+'的连接非常可怕。正如另一个答案中所提到的,StringBuilder可能更具可读性。
答案 6 :(得分:1)
您应该更喜欢StringBuilder而不是字符串连接,因为您已将方法调用和变量添加到字符串中。
然而,像“this”和“is”这样的简单字符串的数量对性能没有影响,因为编译器将有效地处理它们并创建最终将在字节码中的实际字符串。有了这个说法,那些提到的字符串将不会有最终表现的开销。
答案 7 :(得分:1)
当字符串被写成这样的时候,我认为这对性能没有任何影响 - 编译器无论如何都会优化它。