33.Java-String分析

weixin_33935777發表於2018-06-11
常量池:專門儲存常量的地方,都指的方法區中

編譯常量池:把位元組碼載入進JVM的時候,儲存的是位元組碼的相關資訊(不研究)

執行常量池:儲存常量資料(研究)

面試題1

下列程式碼分別建立了幾個String物件?

String str1 = "ABCD";
String str2 = new String("ABCD");

public class Hello{
    
    public static void main(String[] args){
        String str1 = "ABCD";
        String str2 = "A"+"B"+"C"+"D";
        String str3 = "AB"+"CD";
        String str4 = new String("ABCD");
        
        string str = "AB";
        String str5 = temp+"CD";
        
        String str6 = getStr()+"CD";
    }
    
    public static String getStr(){
        return "AB";
    }
    
}

String物件比較:
一:單獨使用""引號建立的字串都是直接量,編譯時期就已經確定儲存到常量池中.
二:使用new String("")建立的物件會儲存到堆中,是執行時期才建立.
三:使用包含直接量的字串連線符如 "AA"+"BB"建立的也是直接量,編譯時期就能確定,已經 確定能儲存到常量池中
四:使用包含String直接量(無final修飾符)的字串表示式(如 "AA"+s1)建立的物件是執行時期才建立的,儲存到堆中.

相關文章