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?
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
(oderStringBuffer
) und ihre Methodeappend
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.
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.
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:
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.
Es ist auf dem Sprachniveau getan. Die Java-Sprachspezifikation ist sehr spezifisch, was die String-Hinzufügung tun muss .
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: Ссылка
Tags und Links string java string-concatenation operator-overloading