2015-10-06 107 views
1
StringBuffer sb = new StringBuffer(); 

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

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

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

都将打印"New Delhi"

哪一个更好?为什么?

因为有时候为了节省时间我使用"+"而不是".append"

+6

是的,但它有点失败的目的。 – MadProgrammer

+2

编译器可能会将其转换为单个字符串文字,因此没有任何工作可以连接字符串。 –

+1

@AndyTurner:不只是可能 - 它有保证。 –

回答

0

任何字符串追加操作被转换成的StringBuilder内部像

“答案是:” +值

被转换成:

新的StringBuilder(“答案是:“))。append(value).toString()

如果任何表达式连接不是常量,则.append是更好的方法。

所以在你的情况下,无论你写什么样的表现方式都无关紧要。只有'+'会提高你的代码的可读性。

+0

编辑正在回答这个问题。 –

0

常量字符串连接将在编译时被替换。

如果连接变量字符串,例如,您应该使用Stringbuilder/Stringbuffer。变量,特别是在循环中进行连接时。

1

“+”号用于在另一个字符串的末尾添加字符串。现在,根据你的问题,每当append()与字符串缓冲区一起使用以追加字符序列或字符串时,附加函数在内部执行以使用“+”符号连接字符串。

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编译器会自动连接它一个字符串

  • 当使用“附加”时,javac编译器将自动扩展为两个字符串变量。

所以对于静态的字符串,该“+”好使用。

相关问题