Ich möchte mit ein paar Codezeilen demonstrieren, dass in Java, um zwei Strings ( String
) zu vergleichen, equals()
anstelle des Operators ==
verwendet werden muss.
Hier ist etwas, was ich versucht habe:
%Vor% Ich habe diese Ausgabe erwartet: different strings
, weil ich mit dem Test s1 == s2
tatsächlich zwei Referenzen (d. h. Adressen) anstelle des Inhalts des Objekts vergleiche.
Aber ich habe tatsächlich diese Ausgabe: same strings
!
Beim Surfen im Internet habe ich festgestellt, dass einige Java-Implementierungen den obigen Code optimieren, so dass s1
und s2
tatsächlich auf die gleiche Zeichenfolge verweisen.
Nun, wie kann ich das Problem mit dem Operator ==
beim Vergleich von Strings (oder Objekten) in Java demonstrieren?
Nun, wie kann ich das Problem mit dem Operator == beim Vergleich von Strings (oder Objekten) in Java demonstrieren?
Hier ein Weg:
%Vor%Seien Sie auch vorsichtig, wenn Sie primitive Wrapper vergleichen und Auto-Boxing verwenden: Integer (und Long) für Instanz-Caches (und wiederverwendet!) die Werte -128..127. Also:
%Vor% druckt true
, während:
druckt false
!
JAVA verwaltet einen String-Pool im Heap-Space, in dem nach Möglichkeit versucht wird, mehrere Referenzen für die gleichen Werte zu haben.
Hätten Sie geschrieben:
%Vor%es hätte Ihnen die Ausgabe gegeben: "verschiedene Strings". Das Schlüsselwort "new" erstellt eine neue Objektreferenz, während die Angabe new nicht zuerst den String-Pool auf seine Existenz überprüft.
Tags und Links string java comparison equals