maettig.com

Thiemos Archiv

Java kennt keine Operator-Überladung. Objekte und damit auch Strings darf man deshalb nie mit == vergleichen, da das immer nur die Referenzen der beiden Objekte vergleicht, also ob es sich um ein und das selbe Objekt handelt. Das kann man hassen, aber irgendwann denkt man gar nicht mehr darüber nach. Seltsamerweise klappt es manchmal doch. Warum, ist hier relativ anschaulich erklärt. Verlassen sollte man sich darauf aber nicht, da das in einer anderen Java-Implementierung ganz anders sein kann. Verrückte Sprache.
Na ja, "verrückt" würde ich das nicht nennen, eher "bescheuert": Eine automatische Ressourcenfreigabe per Garbage Collection ist grundlegender Teil der Sprache, aber Zeichenketten fühlen sich an als wäre die Zeichenketten-"Implementierung" in C oder Assembler das Höchste der Gefühle.

Und das Fehlen von Operator-Overloading (oder Techniken mit vergleichbarem Effekt) macht sich vor allem dann unangenehm bemerkbar wenn man z.B. mathematische Algorithmen mit mehrdimensionalen Strukturen (Vektoren, Geometrie, komplexe Zahlen usw.) mit den gewohnten Operatoren schreiben will: Einfache Lesbarkeit? Fehlanzeige, das können C++, C# oder Lua allemal besser.

Ein Test auf identische Adressen/Referenzen kann mitunter z.B. dazu verwendet werden wenn man herausfinden will ob eine Zeichenkette noch mit der ursprünglich zur Initialisierung verwendeten Stringkonstante bestückt ist. Abgesehen von einigen Debug/Test-Asserts fällt mir jedoch keine Verwendung ein bei der das nicht stark nach einer potentiellen Fehlerquelle aussieht.
T$

Kommentare zu diesem Beitrag können per E-Mail an den Autor gesandt werden.

[ ← Zurück zur Übersicht ]

Impressum & Datenschutz