int count;
//done something to count
String myString = "this " + "is " + "my " + "string" + "and " + this.methodCall() + " answer " + "is : " + count;
或者使用StringBuilder/StringBuffer更好吗?
int count;
//done something to count
String myString = "this " + "is " + "my " + "string" + "and " + this.methodCall() + " answer " + "is : " + count;
或者使用StringBuilder/StringBuffer更好吗?
Java编译器会将其转换为StringBuilder以提高重复字符串连接的性能。 http://java.sun.com/docs/books/jls/third%5Fedition/html/expressions.html#15.18.1.2
当您在循环中进行连接时,编译器无法自动替换StringBuilder,这时您应该考虑从连接到StringBuilder。
Java 5.0中,StringBuffer的Javadoc指出:
通常应该优先使用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();
我认为你不需要担心性能问题,除非你需要清除系统中的垃圾,但此时你不会在这里使用字符串。(这种情况发生的可能性非常小)
如果您使用 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
(想象它更大)...
使用"+"运算符进行字符串连接会创建许多临时对象并增加垃圾回收。使用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);
在编程中,应该优先使用StringBuilder而不是字符串拼接,因为你会将方法调用和变量添加到字符串中。
然而,像"this "和"is"这样的简单字符串数量对性能没有影响,因为编译器会有效地处理它们并创建最终会出现在字节码中的内部字符串。也就是说,这些提到的字符串对最终性能没有任何额外开销。
我认为这样写字符串对性能没有任何影响 - 编译器会进行优化。