2016-09-30 18 views
1
public class Do { 

    static String s="Instance"; 

    public static void method(String s){ 
     s="Add"; 
    } 

    public static void main(String[] args) { 
     Do d=new Do(); 
     s="new Instance"; 
     String s="Local"; 
     method(s); 
     System.out.println(s); 
     System.out.println(d.s); 
    } 
} 

輸出爲:從哪個內存區域調用我的字符串?

Local 

new Instance 

在這裏我想提出一個靜態全局變量爲「實例」,之後我與「新實例」中的主要方法再次對其進行初始化。
我的問題是在哪個內存區域「實例」,「新實例」和「本地」會去,以及如何?

+5

他們將全部進入字符串常量池(Java 8中的Metaspace) – TheLostMind

回答

0

既然你已經聲明瞭一個String變量而不使用新的關鍵字,他們將會在String Constant Pool中獲得一個位置。我沒有看到任何與此代碼混淆的部分。如果你已經聲明變量像

String s = new String("local"); 

然後這將創建堆和字符串常量池。 但是,瞭解String pool變化的主要觀點是,從Java 1.7開始,String池已經轉移到堆中,並且不再限制固定大小的permgen空間。

+0

我知道,但只是證明輸出逐行,因爲它是像「本地」和「新實例」。以及在哪裏以及如何保存s =「Instance」,以及s =「local」保存在哪裏? –

相關問題