Zeichenketten können offensichtlich, und primitive Zahlarten irgendwie concatinated sein. Außerdem kann man Wege und Strings und dergleichen miteinander verbinden. Wie funktioniert das intern in Java? Gibt es eine versteckte C++ - ähnliche Operatordefinition?Wie funktioniert der '+' Operatorüberladen für nicht-primitive Typen in Java?
Antwort
In Java wird kein Operator überladen. All dies ist intern für den Compiler.
Wenn der Java-Compiler Ihr Programm übersetzt, kennt er den Kompilierungszeittyp jedes Ausdrucks und Unterausdrucks. Wenn es einen +
mit einem String
Ausdruck auf einer Seite sieht, wendet es Zeichenfolge-Verkettung an. Wenn zwei verschiedene Typen angezeigt werden, werden Regeln für die Typerweiterung angewendet und so weiter. Dieser Prozess ähnelt der Überladungsauflösung in Sprachen, die das Überladen von Operatoren unterstützen, ist jedoch den Programmierern, die die Sprache verwenden, vollständig verborgen.
Der Operator + funktioniert als Operator für zusätzliche Operatoren oder Stringverkettungen. Die Auswahl hängt von den Operanden ab, d. H. Wenn sie von primitiven Zahlentypen sind, zum Beispiel: int, kurz, lang, float, double usw., führt der Java-Compiler eine additive Operation durch. Wenn einer der Operanden jedoch eine Zeichenfolge ist, führt er eine Verkettung durch. 15.18.1 String-Verkettungsoperator + Wenn nur ein Operandenausdruck vom Typ String ist, wird die Stringkonvertierung (§5.1.11) für den anderen Operanden ausgeführt, um zur Laufzeit eine Zeichenfolge zu erzeugen. Das Ergebnis der Zeichenfolgenverkettung ist eine Referenz auf ein String-Objekt, das die Verkettung der beiden Operandenzeichenfolgen ist. Die Zeichen des linken Operanden gehen den Zeichen des rechten Operanden in der neu erzeugten Zeichenkette voraus. Das String-Objekt wird neu erstellt (§12.5), es sei denn, der Ausdruck ist eine Konstante Ausdruck (§15.28). Eine Implementierung kann die Konvertierung und Verkettung in einem Schritt ausführen, um zu vermeiden, dass ein intermediäres String-Objekt erstellt und dann verworfen wird. Um die Leistung der wiederholten Zeichenfolgenverkettung zu erhöhen, kann ein Java-Compiler die StringBuffer -Klasse oder eine ähnliche Technik verwenden, um die Anzahl der intermediären String-Objekte zu reduzieren, die durch Auswertung eines Ausdrucks erstellt werden. Für primitive Typen kann eine Implementierung auch die Erstellung eines Wrapper Objekts optimieren, indem sie direkt von einem primitiven Typ in eine Zeichenfolge konvertiert. [Link] [http://docs.oracle.com/javase/specs/#39990] Seite 564
direkte Verbindung: http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.18.1 – zapl
- 1. Wie funktioniert die Gleichheit für numerische Typen?
- 2. Java Iterator für primitive Typen
- 3. Casting Regeln für primitive Typen in Java
- 4. Wie funktioniert Object.toString() für verschiedene zugrunde liegende Typen?
- 5. inkompatible Typen in Java
- 6. Wie unveränderliche Typen in Java erweitern
- 7. Java GetConstructor (Typen) mit parametised Typen
- 8. Wie funktioniert der Java-Operator?
- 9. Erstellen nullables Typen in Java
- 10. Java für jeden, aber mehrere Iterator-Typen?
- 11. Java Generics: inkompatible Typen
- 12. Ein Nachrichtentext Autor für Java-Typen nicht
- 13. java UTF8 - Zeichen, String-Typen
- 14. Eclipse: Aktualisierung bekannter Typen in Java-Projekt
- 15. Java verschachtelte Typen Szenarien
- 16. Type.GetType() funktioniert nicht für F # Typen in C# Code
- 17. Kosten für das Gießen von primitiven Typen in Java
- 18. Enum Typen wie in Effective Java von Joshua Bloch
- 19. Floating und Double-Typen reichen in Java
- 20. Wie funktioniert @override in Java?
- 21. Android für Schleife funktioniert nicht wie Java
- 22. Java generische Typen Mismatch Fehler
- 23. Funktioniert der Operator Java & = & & &&?
- 24. Wie funktionieren Zeiger mit primitiven Typen in Java?
- 25. Wie funktioniert + Operator in Java?
- 26. Java Generics und numerischen Typen
- 27. Wie kann ich Typen in Java mit Reflexion vergleichen
- 28. Wie funktioniert der dynamische Proxy von Java?
- 29. Wie ReplaceAll funktioniert in Java?
- 30. scalaz.Equal für pfadabhängige Typen
Sie können eine Antwort hier finden: http://stackoverflow.com/questions/47605/string-concatenation-concat-vs-operator. Wenn Sie Strings mit anderen Objekten verketten, wird die Methode 'String.valueOf()' auf jedes Nicht-String-Objekt angewendet, um es in einen String zu transformieren. –
ist das Tag ** Polymorphismus ** notwendig ?? –