Ich möchte zwei Zeichenfolgen für die Gleichheit in Java vergleichen, wenn eine oder beide vorhanden sein könnten null
, daher kann ich nicht einfach aufrufen .equals()
. Was ist der beste Weg?
boolean compare(String str1, String str2) {
...
}
Bearbeiten:
return ((str1 == str2) || (str1 != null && str1.equals(str2)));
Antworten:
Dies ist, was Java-interner Code verwendet (bei anderen
compare
Methoden):quelle
<0
,==0
oder>0
um anzuzeigen , welche ein niedriger / Reibe als die andereObjects.equals(Object, Object)
wie Mark Rotteveel in seiner Antwort darauf hingewiesen hat (bitte positiv bewerten)Seit Java 7 können Sie die statische Methode verwenden
java.util.Objects.equals(Object, Object)
, um zwei Objekte gleich zu prüfen, ohne sich um sie zu kümmernnull
.Wenn beide Objekte vorhanden sind
null
, wird es zurückgegebentrue
, wenn eines vorhanden istnull
und eines nicht, wird es zurückgegebenfalse
. Andernfalls wird das Ergebnis des Aufrufsequals
des ersten Objekts mit dem zweiten als Argument zurückgegeben.quelle
Object.equals(Object)
erfolgt keine Typprüfung zur Kompilierungszeit. DasObjects.equals(Object, Object)
funktioniert sehr ähnlich wie ein normalesequals
und Rückschluss / Überprüfung durch IDE, diese Regeln sind Heuristiken, die ebenfalls unterstützt werdenObjects.equals(Object, Object)
(z. B. hat IntelliJ IDEA 2016.2 die gleiche Prüfung sowohl für die normale Gleichheit als auch für die von Objekten).In diesen Fällen ist es besser, Apache Commons StringUtils # equals zu verwenden . Es werden bereits Nullzeichenfolgen verarbeitet. Codebeispiel:
Wenn Sie die Bibliothek nicht hinzufügen möchten, kopieren Sie einfach den Quellcode der
StringUtils#equals
Methode und wenden Sie ihn bei Bedarf an.quelle
Für diejenigen auf Android, die Objects.equals (str1, str2) von API 19 nicht verwenden können, gibt es Folgendes:
Es ist null sicher. Es muss selten die teurere string.equals () -Methode verwendet werden, da identische Strings auf Android dank Android's String Pooling fast immer mit dem Operanden "==" verglichen werden und Längenprüfungen eine schnelle Möglichkeit sind, die meisten Fehlanpassungen herauszufiltern.
Quellcode:
quelle
Seit Version 3.5 hat Apache Commons StringUtils die folgenden Methoden:
Diese bieten einen null-sicheren String-Vergleich.
quelle
Verwenden von Java 8:
quelle
Vergleichen Sie zwei Zeichenfolgen mit den Methoden equals (-, -) und equalsIgnoreCase (-, -) der Apache Commons StringUtils-Klasse.
StringUtils.equals (-, -) :
StringUtils.equalsIgnoreCase (-, -) :
quelle
Sie können
java.util.Objects
Folgendes verwenden.quelle
ist es das, was du gewünscht hast?
quelle
false
wenn beide Zeichenfolgennull
das gewünschte Ergebnis sind.quelle
quelle
OK, was bedeutet "bestmögliche Lösung"?
Wenn Sie am besten lesbar meinen, dann sind alle möglichen Lösungen für einen erfahrenen Java-Programmierer ziemlich gleichwertig. Aber IMO ist dies am besten lesbar
Mit anderen Worten, verstecken Sie die Implementierung in einer einfachen Methode, die (idealerweise) eingebunden werden kann.
(Sie können auch eine Dienstprogrammbibliothek eines Drittanbieters "auslagern" ... wenn Sie sie bereits in Ihrer Codebasis verwenden.)
Wenn Sie am performantesten meinen, dann:
null
Argumenten.quelle