StringBuffer sb = new StringBuffer();
sb.append("New "+"Delhi");
和其他是:
sb.append("New ").append("Delhi");
两者都会打印"New Delhi"
。
哪一个更好,为什么?
因为有时节省时间,我使用"+"
代替".append"
。
答案 0 :(得分:4)
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编译器会自动连接字符串。
使用“append”时,javac编译器将自动扩展为两个String变量。
因此对于静态字符串,“+”适合使用。
答案 1 :(得分:1)
“+”符号用于在另一个字符串的末尾添加一个字符串。现在,根据你的问题,只要append()与String Buffer一起使用,就可以追加字符序列或字符串,在内部执行append函数,使用“+”符号连接字符串。
答案 2 :(得分:0)
任何字符串追加操作都在内部转换为StringBuilder,如
“答案是:”+值
转换为:
new StringBuilder(“答案是:”))。append(value)。toString()
如果连接的任何表达式不是常量,则.append是一种更好的方法。
所以在你的情况下,你的写作方式并不重要。只有'+'才能提高代码的可读性。
答案 3 :(得分:0)
将在编译时替换常量字符串连接。
如果连接变量字符串,则应使用Stringbuilder / Stringbuffer,例如变量,尤其是在循环中进行连接时。