Java-String-Literalverkettung

8
%Vor%

Ausgabe ist

%Vor%

String-Literale verwenden Interning-Prozess, warum two() und three() ist falsch.Ich kann im Fall von three() verstehen, aber two() ist nicht klar.aber muss für beide Fälle die richtige Erklärung.

Kann jemand bitte den richtigen Grund erklären?

    
ankita gahoi 27.05.2013, 10:26
quelle

1 Antwort

14

Im Fall von 2 und 3 kann Compiler den Wert von String nicht berechnen, da hill + i eine Laufzeitanweisung ist, dasselbe für s1.length()

Lesen Sie hier, ich fragte den gleichen Fall - link

Denken Sie so, dass die String s1 and s2 die Kompilierzeitkonstante, s1="hill5" und s2="hill" + 5 verwenden, denken Sie daran, String als Literal ist konstant, sein Status kann nicht geändert werden, da String unveränderlich ist .

Also sagt der Compiler zur Kompilierzeit "Oh ja, sie werden als derselbe Wert berechnet, ich muss den gleichen Bezug zu s1 und s2 zuweisen".

Aber im Falle der Methode two() und three() , Compiler sagt "Ich weiß nicht, kann Wert von ich kann jederzeit geändert werden, oder s1.length() ändert sich jederzeit", es ist eine Laufzeit Sache, so Compiler setzt nicht s2 von two() und three() Methode im Pool,

Sie sind daher falsch, weil zur Laufzeit ein neues Objekt erstellt wird, sobald es richtig geändert wird !!

    
anshulkatta 27.05.2013, 10:31
quelle