Heim  >  Artikel  >  Java  >  Analysieren Sie die Rolle von intern() in Java

Analysieren Sie die Rolle von intern() in Java

Y2J
Y2JOriginal
2017-05-19 09:43:433001Durchsuche

Ich habe die intern()-Methode von String heute beim Lesen eines Buches bemerkt. Ich habe sie bisher nur gesehen, aber ich habe sie mir nicht genau angesehen. Also habe ich heute einen Blick darauf geworfen. Persönlich denke ich, dass das Hinzufügen dieser Methode zur String-Klasse die Leistung ein wenig verbessern kann, da das Abrufen von Daten aus dem Konstantenpool schneller ist als das Abrufen von Daten aus dem Heap. (Persönliches Gefühl)

Die wenigen Sätze zu API über diese Methode, in der Tat ist die Zusammenfassung, dass nach dem Aufruf dieser Methode die ZeichenfolgeObjekt Treten Sie dem Konstantenpool bei. Wir alle wissen, dass der Konstantenpool Teil des Methodenbereichs ist und von Threads gemeinsam genutzt wird, sodass der Konstantenpool auch von Threads gemeinsam genutzt wird nicht threadfreiSicher , es ist tatsächlich threadsicher. Es führt lediglich dazu, dass die -Referenz mit demselben Wert auf dieselbe Position verweist, aber es gibt keine Neuer Wert im Konstantenpool. Dann wird ein neues konstantes Ergebnis geöffnet und an die neue Referenz übergeben. Anstelle desselben Objekts wie bei nicht synchronisiertem Thread wird die Zeichenfolge von new direkt zugewiesen die -Variable Die Zeichenfolgen werden an verschiedenen Orten gespeichert. Ersteres befindet sich im Heap, während sich letzteres im Konstantenpool befindet. Außerdem werden Zeichenfolgen zusammengefügt, wenn sie mit " kombiniert werden. +“, das Ergebnis ist, dass es sich um einen konstanten Pool oder Heap handelt. Dies kann je nach Situation variieren. Ich habe ein paar Codezeilen geschrieben, um es zu testen.

Zuerst das Ergebnis:

1. Weisen Sie einen Wert zu, wenn Sie eine String-Variable direkt definieren. Wenn auf der rechten Seite des -Ausdrucks nur eine String-Konstante steht, dann Die Variable wird im Konstantenpool in gespeichert.

2. Die von new erzeugte Zeichenfolge wird im Heap gespeichert.

3. Beim Zusammenfügen von Zeichenfolgen, also bei der Ausführung der „+“-Operation, gibt es zwei Situationen:

i Die rechte Seite des Ausdrucks ist eine reine Zeichenfolgenkonstante wird im Inneren des Stapels gespeichert.

ii. Wenn sich auf der rechten Seite des Ausdrucks eine Zeichenfolgenreferenz befindet, bei der es sich um das Handle des Zeichenfolgenobjekts handelt, wird diese im Heap gespeichert.

   String str1 = "aaa";
        String str2 = "bbb";
        String str3 = "aaabbb";
        String str4 = str1 + str2;
        String str5 = "aaa" + "bbb";
        System.out.
print
ln(str3 == str4); // false
        System.out.println(str3 == str4.intern()); // true
        System.out.println(str3 == str5);// true

Ergebnisse: str1, str2, str3 und str5 sind alle im Konstantenpool vorhanden. Da str4 einen Referenztyp in der rechten Hälfte des Ausdrucks hat, ist str4 im Heap-Speicher vorhanden, während str5 vorhanden ist Kein Referenztyp auf der rechten Seite des Ausdrucks, ist eine reine String-Konstante, die im Konstantenpool gespeichert wird. Tatsächlich wird Integer -128 ~ +127 auch im Konstantenpool gespeichert. Beispiel: Integer i2 = 10; was wahrscheinlich der Leistungsoptimierung dient.

[Verwandte Empfehlungen]

1. Kostenloses Java-Video-Tutorial

2. Detaillierte Erklärung von intern() im String-Objekt

3. Eingehende Analyse der intern()-Methode in Java

4.Zusammenfassung der Erfahrungen mit der intern()-Methode in JAVA

5. Was ist das Konzept der Intern-Methode in Java?

Das obige ist der detaillierte Inhalt vonAnalysieren Sie die Rolle von intern() in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn