先看下简单的调用 图中的代码:
package test;
public class Main {
String a =
"asd";
public void test(){
int a =
4;
}
public static void main(String[] args) {
String b =
"asd";
}
}
进行javap -v 进行反编译后产生的效果为 在图中的Constant pool中的#12 #13我们可以看出jvm将String值存储在常量池中,并且我们可以发现在下面的public static void main(java.lang.String[]) 这个方法中的反编译为ldc #12(把常量池中的项压入栈) 将常量池中的String值取出来并赋值给变量b
下面看String 对象中的值调用
同样运行javap -v 我们可以发现 常量池中的代码没有变
在main主方法中的反编译为调用new String(String str)方法并且将str指向常量池中的#12中的值
转载请注明原文地址: https://ju.6miu.com/read-1302161.html