String值的調用(字節碼層面)

這裏寫圖片描述
先看下簡單的調用
圖中的代碼:

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中的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章