我是靠谱客的博主 从容帽子,这篇文章主要介绍Java字符串相加,现在分享给大家,希望可以做个参考。

Java字符串


一个普通的字符串相加:

public class StringTest {
public static void main(String[] args){
String a = "a";
String b = "b";
String c = "c";
String d = a + b + c;
System.out.println(d);
}
}


javap看一下编译后的结果,可以看到+被转成了StringBuilder的append
zeal@zeal-ThinkPad:~/tobenew$ javap -c StringTest
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar
Compiled from "StringTest.java"
public class StringTest {
public StringTest();
Code:
0: aload_0
1: invokespecial #1
// Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: ldc
#2
// String a
2: astore_1
3: ldc
#3
// String b
5: astore_2
6: ldc
#4
// String c
8: astore_3
9: new
#5
// class java/lang/StringBuilder
12: dup
13: invokespecial #6
// Method java/lang/StringBuilder."<init>":()V
16: aload_1
17: invokevirtual #7
// Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
20: aload_2
21: invokevirtual #7
// Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
24: aload_3
25: invokevirtual #7
// Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
28: invokevirtual #8
// Method java/lang/StringBuilder.toString:()Ljava/lang/String;
31: astore
4
33: getstatic
#9
// Field java/lang/System.out:Ljava/io/PrintStream;
36: aload
4
38: invokevirtual #10
// Method java/io/PrintStream.println:(Ljava/lang/String;)V
41: return
}


一个普通的final字符串相加:
public class StringTest {
public static void main(String[] args){
final String a = "a";
final String b = "b";
final String c = "c";
String d = a + b + c;
System.out.println(d);
}
}


可以看到3个final字符串直接被编译到了变量中
zeal@zeal-ThinkPad:~/tobenew$ javap -c StringTest
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar
Compiled from "StringTest.java"
public class StringTest {
public StringTest();
Code:
0: aload_0
1: invokespecial #1
// Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: ldc
#2
// String abc
2: astore
4
4: getstatic
#3
// Field java/lang/System.out:Ljava/io/PrintStream;
7: aload
4
9: invokevirtual #4
// Method java/io/PrintStream.println:(Ljava/lang/String;)V
12: return
}


另一个普通的字符串相加:
public class StringTest {
public static void main(String[] args){
final String a = "a";
String b = "b";
for(int i=0; i<5; i++) {
b = b + a;
}
System.out.println(b);
}
}


可以看到构造出了一堆的StringBuilder(goto语句)

zeal@zeal-ThinkPad:~/tobenew$ javap -c StringTest
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar
Compiled from "StringTest.java"
public class StringTest {
public StringTest();
Code:
0: aload_0
1: invokespecial #1
// Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: ldc
#2
// String b
2: astore_2
3: iconst_0
4: istore_3
5: iload_3
6: iconst_5
7: if_icmpge
36
10: new
#3
// class java/lang/StringBuilder
13: dup
14: invokespecial #4
// Method java/lang/StringBuilder."<init>":()V
17: aload_2
18: invokevirtual #5
// Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
21: ldc
#6
// String a
23: invokevirtual #5
// Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
26: invokevirtual #7
// Method java/lang/StringBuilder.toString:()Ljava/lang/String;
29: astore_2
30: iinc
3, 1
33: goto
5
36: getstatic
#8
// Field java/lang/System.out:Ljava/io/PrintStream;
39: aload_2
40: invokevirtual #9
// Method java/io/PrintStream.println:(Ljava/lang/String;)V
43: return
}


最后

以上就是从容帽子最近收集整理的关于Java字符串相加的全部内容,更多相关Java字符串相加内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(94)

评论列表共有 0 条评论

立即
投稿
返回
顶部