2016-09-30 4 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); 
    } 
} 

Ausgabe lautet:Aus welchem ​​Speicherbereich wird meine Zeichenfolge aufgerufen?

Local 

new Instance 

Hier habe ich eine statische globale Variable mache als „Instanz“ und danach habe ich es wieder bin Initialisierung mit „Neue Instanz“ im Hauptverfahren.
Meine Frage ist, in welchem ​​Speicherbereich "Instance", "New Instance" und "Local" gehen und wie?

+5

Sie werden alle in den String Constants Pool gehen (Metaspace in Java 8) – TheLostMind

Antwort

0

Da Sie eine String-Variable ohne Verwendung eines neuen Schlüsselworts deklariert haben, erhalten sie einen Platz im String-Konstantenpool. Ich sehe keinen Teil der Verwirrung mit diesem Code. Wenn Sie die Variable wie

String s = new String("local"); 

erklärt hatte, dann würde dies auf Heap erstellt wurden sowie String konstant Pool. Aber der Hauptpunkt der Kenntnis der Änderungen in String-Pool ist, dass von Java 1.7, der String-Pool wurde in Heap verschoben und Sie sind nicht mehr begrenzt mit festen Größe Permgen Raum.

+0

Ich weiß, aber Just Just die Ausgabe Zeile für Zeile wie es kommt wie: "local" und "New Instance". Und wo und wie s = "Instanz" speichert und wo s = "lokal" speichert? –

Verwandte Themen