String值的调用(字节码层面)

这里写图片描述
先看下简单的调用
图中的代码:java

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值取出来并赋值给变量bweb

下面看String 对象中的值调用
这里写图片描述jvm

一样运行javap -v 咱们能够发现
这里写图片描述
常量池中的代码没有变svg

这里写图片描述
在main主方法中的反编译为调用new String(String str)方法而且将str指向常量池中的#12中的值spa