Warum gibt die String.intern () -Methode zwei verschiedene Ergebnisse zurück?

7

Ich habe den Code so:

%Vor%

und ich habe das Ergebnis:

%Vor%

Ich kann verstehen, warum line1 und line3 wahr sind, aber ich bin ein Problem mit der line2, Warum ist das falsch?

Mein Java ist: Java-Version "1.8.0_73"

    
Timi 17.03.2016, 14:25
quelle

2 Antworten

15

String.intern () gibt einen String im String-Literal-Pool zurück. Wenn die Zeichenfolge jedoch bereits im Pool vorhanden ist, wird die vorhandene Zeichenfolge zurückgegeben.

Wenn Sie einen neuen String auswählen, sollte er den von Ihnen erstellten String zurückgeben. Wenn Sie jedoch einen String verwenden, der bereits im Pool vorhanden ist, erhalten Sie den vorhandenen String.

Es ist davon auszugehen, dass in diesem Fall "java" bereits im Pool existiert. Wenn Sie also intern () aufrufen, gibt es ein anderes Objekt zurück, so dass == falsch ist.

Hinweis: string.intern().equals(string) sollte immer wahr sein.

    
Peter Lawrey 17.03.2016, 14:29
quelle
4

Die Konstante String "java" ist bereits im Java-Konstantenpool vorhanden, Sie können dies jedoch überprüfen, indem Sie

ändern %Vor%

bis

%Vor%

was die gleiche Konstante und Ausgabe erhält

%Vor%

Alternativ können Sie "计算机软件" und "String" wie

zum Konstantenpool hinzufügen %Vor%

Dann würden Sie (im Einklang mit Ihren Beobachtungen)

bekommen %Vor%     
Elliott Frisch 17.03.2016 14:35
quelle

Tags und Links