2016-06-10 15 views
0

erstellt werden Ich bin in dem folgenden Beispiel verwirrend. Ich möchte wissen, wie viele Objekte im Speicher nach dem Ausführen dieses Codes erstellt werden. Wie möglich, erklären Sie mir bitte Details.Wie viele Objekte zwischen String-Literal und neue String-Objekt

+0

6 .................. –

+0

gespeichert Warum 6? Sollte es nicht 4 ... 3 in String-Pool und 1 im Heap sein ... – Codebender

+0

Können Sie mir Details erklären, wie zwischen Stringliteral und String-Objekt zu berechnen.? –

Antwort

2

Der folgende Link sollte Klarheit über alle Ihre Zweifel in Bezug auf das Konzept der String Literal und String Object Creation.

http://www.javaranch.com/journal/200409/ScjpTipLine-StringsLiterally.html

Wenn Sie einen String mit einem String-Literal erstellen, wird das Objekt auf dem Heap und der Verweis auf dieses Objekt erstellt wird, in dem String-Konstanten-Pool gespeichert. Im Folgenden werden alle Verweise auf dieses String-Literal kein neues Objekt erstellen, sondern der Verweis aus dem String-Konstantenpool wird zurückgegeben. Wenn Sie ein String-Objekt mit einem neuen Schlüsselwort erstellen, wird das Objekt auf Heap erstellt, aber keine Referenzen im String Constant Pool gespeichert.

In Ihrem Fall: 4 Objekte sollen auf dem Heap erstellt werden, aber nur die Referenzen der ersten drei Objekte werden im String Constant Pool gespeichert. Das Objekt erstellt das neue Schlüsselwort wird seine Referenz nicht im String Constant Pool

+0

While haven Es sind noch viele Änderungen in Bezug auf das String-Pooling eingetreten, es ist immer noch ziemlich fett, einen Artikel aus 2004 zu verlinken. – Kayaman

+0

Ja, der Grund, warum ich diesen Artikel verlinkt habe, ist, dass es nicht viele Änderungen im String Pooling gegeben hat Konzept sehr gut :) –

+0

Nun, der richtige Ansatz ist es zu wählen, um als Duplikat zu schließen, da dies +1000 mal gefragt wurde. Die Erklärungen sind auch viel besser als in diesem Artikel.Sie beschreiben auch die Veränderungen, die * in Bezug auf das String-Pooling * stattgefunden haben. – Kayaman