Java-String-Literal wird automatisch als String-Objekt interpretiert, aber wie?

8

Was ist die Mechanik hinter Java, die String-Literale automatisch als String-Objekte interpretiert, da es keine überladenen Operatoren gibt und keine Standardunterstützung für Low-Level-String-Puffer (ohne den High-Level-StringBuffer)? Ist dies ein Kontext für eine Sprache oder eine virtuelle Maschine?

    
TurtleToes 24.03.2011, 04:36
quelle

3 Antworten

6

Es ist ein wenig von beidem.

Die JVM hat Bytecodes zum Laden Stringliterale auf dem Laufzeitstapel, und diese Opcodes sind in der JVM-Spezifikation spezifiziert durch Drücken eines entsprechend konstruierten String-Objekt auf den Stapel, deren Inhalt gleich einem Stringliteral spezifiziert in der arbeiten, Klassendatei. Es gibt keine Spezifikation, wie dies andere getan wird, als dass das String-Objekt gebracht werden muß, was bedeutet, dass die Transformation Umsetzung spezifisch.

Auf dem Sprachniveau kann der Compiler behandelt von Stringliteralen es sieht als komplettes String-Objekt für die Zwecke der Typprüfung und kann dann nur die wörtliche schreiben und die entsprechenden Bytecode in die Klassendatei.

    
templatetypedef 24.03.2011, 04:42
quelle
3

Java hat tatsächlich ein paar überladene Operatoren. Zum Beispiel kann + auf String-Objekte sowie auf Int, Float und andere numerische Typen angewendet werden. In jedem Fall wird der Rückgabetyp durch den Typ des Ausdrucks auf jeder Seite von + definiert. Alle überladenen Operatoren sind jedoch in der Sprache vordefiniert. Programmierer haben keinen Mechanismus in der Sprache, um andere zu definieren. Einzelheiten finden Sie in der Sprachspezifikation .

    
Ted Hopp 24.03.2011 04:44
quelle
0

Grundsätzlich schreibt der Compiler Ihren Code um.

%Vor%

Für die Verkettung ist es nur syntaktischer Zucker für die StringBuffer Append-Methode, dh:

%Vor%

wird wie folgt kompiliert:

%Vor%

Jetzt für ein einzelnes Concat ist dies ein Objekt erstellt und 2 Methodenaufrufe. Wenn Sie also eine sehr lange Zeichenfolge innerhalb einer Schleife erstellen, ist es viel effizienter zu schreiben:

%Vor%

anstatt:

%Vor%

Bearbeiten: falscher Codebeispiel entfernt ...

    
Aaron Gage 24.03.2011 04:44
quelle

Tags und Links