2016-05-31 27 views
1

Wie lange wird ein Objekt inline erstellt und an eine Methode übergeben? Zum Beispiel:Inline-Java-Objekt als Parameterlebensdauer übergeben

myMethod(new String("Hello World")); 

Der String „Hallo Welt“ erstellt und zerstört werden kurz nach der myMethod Ausführung oder es bleibt im Speicher, bis es Garbage Collector entfernt?

Antwort

6

JAVA behandelt String Literal anders. Hier würde ein String-Objekt mit dem Wert "Hello World" in String Constant Pool erstellt werden. Die Lebensdauer dieses Literals in Constant Pool wird von JVM bestimmt, was bedeutet, dass JVM entscheiden wird, wann es für Müll gesammelt werden soll (so wie es keinen Speicher mehr in Constant Pool gibt und dieses Objekt nun nicht durch irgendeine Referenz referenziert wird)).

Aber es wird nicht sofort nach der Ausführung der Methode zerstört werden.

können Sie mehr Details auf Zeichenkette Pool finden Sie hier: http://www.thejavageek.com/2013/06/19/the-string-constant-pool/

+0

Danke! Also, wenn ich das String-Objekt von einer anderen Methode bekomme, wird es vom String Constant Pool verwaltet? Beispiel: myMethod (getKey()); unter Berücksichtigung von "getKey()" eine Methode, die eine String-Darstellung eines Schlüssels/Kennworts zurückgibt. – darkalbo

+0

In JAVA String Literal wird mit "" erstellt, während das String-Objekt mit einem neuen Schlüsselwort erstellt wird. Literal wird im String-Konstanten-Pool gehalten, und für das String-Objekt wird ein Literal im Constant-Pool und eins im Heap erstellt, und die Objektreferenz zeigt auf das Objekt, das sich im Heap befindet. –

0

Im ziemlich sicher, dass es nur in dem Verfahren existieren, wenn Sie es auf eine globale Variable zuweisen.