+ Operator für String in Java [duplizieren]

7

Ich habe vor ein paar Minuten diese Frage gesehen und mich entschieden, einen Blick in die Java-Zeichenfolge zu werfen Klasse, um zu überprüfen, ob es eine Überlastung für den Operator + gegeben hat.

Ich konnte nichts finden, aber ich weiß, dass ich das tun kann

%Vor%

Wo ist das implementiert?

    
Samuel Carrijo 24.02.2010, 18:31
quelle

7 Antworten

12

Aus dem Fine-Handbuch :

  

Die Java-Sprache bietet spezielle Unterstützung für den String-Verkettungsoperator (+) und für die Konvertierung anderer Objekte in Strings. Die Verkettung von Strings wird über die Klasse StringBuilder (oder StringBuffer ) und ihre Methode append implementiert. String-Konvertierungen werden über die Methode toString implementiert, die von Object definiert und von allen Klassen in Java übernommen wird. Weitere Informationen zur Zeichenfolgenverkettung und -konvertierung finden Sie unter Gosling, Joy und Steele, Die Java-Sprachspezifikation .

Siehe String-Verkettung in der JLS.

    
Josh Lee 24.02.2010, 18:34
quelle
7

Der Compiler behandelt Ihren Code so, als hätten Sie etwas geschrieben:

%Vor%

Bearbeiten: Irgendeine Referenz? Nun, wenn ich den Code des OP kompiliere und dekompiliere, bekomme ich das:

%Vor%

Also, es ist so, wie ich es gesagt habe.

    
Sean 24.02.2010 18:35
quelle
2

Es wird vom Compiler behandelt.

    
Fredrik 24.02.2010 18:33
quelle
2

Dies ist ein spezielles Verhalten, das in der Sprachspezifikation dokumentiert ist.

  

15.18.1 String Concatenation Operator +

     

Wenn nur ein Operandenausdruck von ist   Geben Sie String ein, dann ist die String-Konvertierung   auf dem anderen Operanden durchgeführt   Erzeugen Sie zur Laufzeit eine Zeichenfolge. Das   Ergebnis ist eine Referenz auf einen String   Objekt (neu erstellt, es sei denn, das   Ausdruck ist eine Kompilierzeitkonstante   Ausdruck (§15.28)) das ist das   Verkettung der beiden Operanden   Saiten. Die Charaktere der   linker Operand vorangestellt   Zeichen des rechten Operanden   in der neu erstellten Zeichenfolge. Wenn ein   Operand vom Typ String ist dann null   die Zeichenfolge "null" wird anstelle von verwendet   dieser Operand.

    
Otto Allmendinger 24.02.2010 18:35
quelle
2

Die meisten Antworten hier sind korrekt (es wird vom Compiler verarbeitet, + wird in .append () konvertiert ...)

Ich wollte hinzufügen, dass jeder den Quellcode für String anschauen und irgendwann anhängen sollte, das ist ziemlich beeindruckend.

Ich glaube, es ging um etwas wie:

%Vor%

=

%Vor%

Aber dann passiert etwas Magie. Dies wird zu:

  • Erstellen Sie ein Zeichenfolgenarray der Länge 3
  • kopiere a in die erste Position.
  • kopiere b in die zweite
  • kopiere c in die dritte

Während die meisten Leute glauben, dass es "ab" erzeugt, dann wirf es weg, wenn es "abc" erzeugt. Es versteht tatsächlich, dass es angekettet ist und manipuliert.

Es gibt auch einen Trick, bei dem Sie, wenn Sie die Zeichenfolge "abc" haben und nach einem Teilstring fragen, der sich als "bc" herausstellt, das exakt gleiche zugrundeliegende Array teilen können. Sie werden bemerken, dass es eine Startposition, eine Endposition und eine "gemeinsame" Flagge gibt.

Wenn es nicht geteilt wird, ist es möglich, dass es die Länge eines Strings verlängert und die anderen kopiert.

Jetzt bin ich nur verwirrend. Lesen Sie den Quellcode - es ist ziemlich cool.

    
Bill K 24.02.2010 18:44
quelle
0

Es ist auf dem Sprachniveau getan. Die Java-Sprachspezifikation ist sehr spezifisch, was die String-Hinzufügung tun muss .

    
Chris Jester-Young 24.02.2010 18:35
quelle
0

String ist als Standardtyp genau wie int, double, float usw. auf Compiler-Ebene definiert. Im Wesentlichen haben alle Compiler eine Überlastung des Operators. Das Überladen von Operatoren ist für Entwickler nicht definiert (anders als in C ++).

Interessanterweise: Diese Frage wurde als Fehler protokolliert: Ссылка

    
Buhake Sindi 24.02.2010 18:40
quelle