我们可以使用+号在StringBuffer中添加字符串文字吗?

时间:2015-10-06 06:06:13

标签: java

StringBuffer sb = new StringBuffer();

sb.append("New "+"Delhi");

和其他是:

sb.append("New ").append("Delhi");

两者都会打印"New Delhi"

哪一个更好,为什么?

因为有时节省时间,我使用"+"代替".append"

4 个答案:

答案 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,例如变量,尤其是在循环中进行连接时。

相关问题