Java 我们可以使用+;是否在StringBuffer中添加字符串文字?

Java 我们可以使用+;是否在StringBuffer中添加字符串文字?,java,Java,另一个是: StringBuffer sb = new StringBuffer(); sb.append("New "+"Delhi"); 两者都将打印“新德里” 哪一个更好,为什么 因为有时为了节省时间,我使用“+”而不是”.append“任何字符串追加操作都会在内部转换为StringBuilder,就像 答案是:“+价值” 转换为: 新建StringBuilder(“答案是:”).append(value.toString() 如果任何被连接的表达式不是常量,.append是一种更好的

另一个是:

StringBuffer sb = new StringBuffer();

sb.append("New "+"Delhi");
两者都将打印“新德里”

哪一个更好,为什么


因为有时为了节省时间,我使用
“+”
而不是
”.append“

任何字符串追加操作都会在内部转换为StringBuilder,就像

答案是:“+价值”

转换为:

新建StringBuilder(“答案是:”).append(value.toString()

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


因此,在您的情况下,从性能角度看,您采用哪种编写方式并不重要。只有“+”将提高代码的可读性。

任何字符串附加操作都会在内部转换为StringBuilder,如

答案是:“+价值”

转换为:

新建StringBuilder(“答案是:”).append(value.toString()

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


因此,在您的情况下,从性能角度看,您采用哪种编写方式并不重要。只有“+”将提高代码的可读性。

常量字符串串联将在编译时被替换


如果串联变量字符串(例如变量),尤其是在循环中进行串联时,应使用Stringbuilder/Stringbuffer

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

如果串联变量字符串(例如变量),尤其是在循环中进行串联时,应使用Stringbuilder/Stringbuffer

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

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

某人追加(“新德里”)

sb.append("New ").append("Delhi");
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
}
公共类测试{
公开考试();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object。“:()V
4:返回
公共静态void main(java.lang.String[]);
代码:
0:new#2//类java/lang/StringBuffer
3:dup
4:invokespecial#3//方法java/lang/StringBuffer。”“:()V
7:astore_1
8:aload_1
9:ldc#4//新德里
11:invokevirtual#5//方法java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
14:流行音乐
15:返回
}
附加在新德里

sb.append("New ").append("Delhi");
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
}
从“Test.java”编译而来
公开课考试{
公开考试();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object。“:()V
4:返回
公共静态void main(java.lang.String[]);
代码:
0:new#2//类java/lang/StringBuffer
3:dup
4:invokespecial#3//方法java/lang/StringBuffer。”“:()V
7:astore_1
8:aload_1
9:ldc#4//新字符串
11:invokevirtual#5//方法java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
14:ldc#6//
16:invokevirtual#5//方法java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
19:流行音乐
20:返回
}
如上字节码所示,对于静态字符串:

  • 当使用“+”时,javac编译器将自动将其转换为字符串

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

因此,对于静态字符串,“+”非常适合使用

某人追加(“新德里”)

sb.append("New ").append("Delhi");
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
}
公共类测试{
公开考试();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object。“:()V
4:返回
公共静态void main(java.lang.String[]);
代码:
0:new#2//类java/lang/StringBuffer
3:dup
4:invokespecial#3//方法java/lang/StringBuffer。”“:()V
7:astore_1
8:aload_1
9:ldc#4//新德里
11:invokevirtual#5//方法java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
14:流行音乐
15:返回
}
附加在新德里

sb.append("New ").append("Delhi");
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
}
从“Test.java”编译而来
公开课考试{
公开考试();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object。“:()V
4:返回
公共静态void main(java.lang.String[]);
代码:
0:new#2//类java/lang/StringBuffer
3:dup
4:invokespecial#3//方法java/lang/StringBuffer。”“:()V
7:astore_1
8:aload_1
9:ldc#4//新字符串
11:invokevirtual#5//方法java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
14:ldc#6//
16:invokevirtual#5//方法java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
19:流行音乐
20:返回
}
如上字节码所示,对于静态字符串:

  • 当使用“+”时,javac编译器将自动将其转换为字符串

  • 当我们