我们知道创建一个字符串有2种方法:
1. String str = “abc”;
2. String str1 = new String(“abc”);
3. String str2 = “abc” + 字符串引用
第一种是在常量池中创建并返回引用
第二种是调用了String的构造方法并返回引用
第三种是调用了StringBuilder的方法拼接
下面我们通过反编译来了解吧~
如何操作?cmd下:
javac classname.java
javap -verbose classname
或者
javap -c className //这个简洁一些
具体可以使用javap --help查看
先上代码1
String str1 = "abc";
String str2 = "bc" + "d";
String str3 = "abc";
让我们反编译一波~
ta-da~

ldc:从常量池中加载指定项的引用到栈。
astore_:将引用赋值给第n个局部变量
让我们解读下该结果:
0: 加载常量池第2项到栈中
2: 将引用赋值给第一个变量
3:将常量池第3

本文通过反编译的方式探讨Java中创建String对象的三种常见方式:直接赋值、使用构造函数以及字符串拼接。详细分析了每种方式在内存中的表现,揭示了它们在常量池和堆内存中的不同行为,特别是对final修饰的字符串常量的处理。同时,文章还提到了String的intern()方法及其在JDK1.7后的实现变化。
最低0.47元/天 解锁文章
1626

被折叠的 条评论
为什么被折叠?



