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编译器将自动将其转换为字符串
- 当我们