StringBuffer sb = new StringBuffer();
sb.append("New "+"Delhi");
等是:我们可以使用+符号在StringBuffer中添加字符串文字吗?
sb.append("New ").append("Delhi");
都将打印"New Delhi"
。
哪一个更好?为什么?
因为有时候为了节省时间我使用"+"
而不是".append"
。
StringBuffer sb = new StringBuffer();
sb.append("New "+"Delhi");
等是:我们可以使用+符号在StringBuffer中添加字符串文字吗?
sb.append("New ").append("Delhi");
都将打印"New Delhi"
。
哪一个更好?为什么?
因为有时候为了节省时间我使用"+"
而不是".append"
。
任何字符串追加操作被转换成的StringBuilder内部像
“答案是:” +值
被转换成:
新的StringBuilder(“答案是:“))。append(value).toString()
如果任何表达式连接不是常量,则.append是更好的方法。
所以在你的情况下,无论你写什么样的表现方式都无关紧要。只有'+'会提高你的代码的可读性。
编辑正在回答这个问题。 –
常量字符串连接将在编译时被替换。
如果连接变量字符串,例如,您应该使用Stringbuilder/Stringbuffer。变量,特别是在循环中进行连接时。
“+”号用于在另一个字符串的末尾添加字符串。现在,根据你的问题,每当append()与字符串缓冲区一起使用以追加字符序列或字符串时,附加函数在内部执行以使用“+”符号连接字符串。
sb.append( “新的 ”+“ 德里”):
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2 // class java/lang/StringBuffer
3: dup
4: invokespecial #3 // Method java/lang/StringBuffer."<init>":()V
7: astore_1
8: aload_1
9: ldc #4 // String New Delhi
11: invokevirtual #5 // Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
14: pop
15: return
}
sb.append( “新 ”).append(“ 德里”):
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2 // class java/lang/StringBuffer
3: dup
4: invokespecial #3 // Method java/lang/StringBuffer."<init>":()V
7: astore_1
8: aload_1
9: ldc #4 // String New
11: invokevirtual #5 // Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
14: ldc #6 // String Delhi
16: invokevirtual #5 // Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
19: pop
20: return
}
由于上述字节码,对于静态字符串:
当使用“+”时,javac编译器会自动连接它一个字符串。
当使用“附加”时,javac编译器将自动扩展为两个字符串变量。
所以对于静态的字符串,该“+”好使用。
是的,但它有点失败的目的。 – MadProgrammer
编译器可能会将其转换为单个字符串文字,因此没有任何工作可以连接字符串。 –
@AndyTurner:不只是可能 - 它有保证。 –