Vergleichen von zwei Objekten in Java mit möglichen null-Werten
Möchte ich zum vergleichen von zwei strings auf Gleichheit in Java, wenn entweder oder beide könnte null
, so kann ich nicht einfach anrufen .equals()
. Was ist der beste Weg?
boolean compare(String str1, String str2) {
...
}
Edit:
return ((str1 == str2) || (str1 != null && str1.equals(str2)));
- möglich, Duplikat der Eine bessere Methode zum vergleichen von Strings, die konnte null
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, was die Java-interne code verwendet (bei anderen
compare
Methoden):compare
Methode nicht in der Java-JDK. Wenn es war, würde ich empfehlen, dass.<0
,==0
oder>0
zu zeigen, welche kleiner ist/reibe als die anderenObjects.equals(Object, Object)
als Mark Rotteveel hat darauf hingewiesen, in seiner Antwort (bitte upvote es)Seit Java 7 die statische Methode
java.util.Objekte.equals(Object, Object)
durchführen equals prüft auf zwei Objekte, ohne sich über Sie zunull
.Wenn beide Objekte sind
null
es zurücktrue
, wenn mannull
anderes nicht zurückfalse
. Ansonsten wird es wieder das Ergebnis des Aufrufs dieequals
auf das erste Objekt mit dem zweiten argument.Object.equals(Object)
es gibt keine compile-Zeit-Typ überprüfen. DieObjects.equals(Object, Object)
arbeitet sehr viel die gleiche wie eine normaleequals
neu und Inferenz/Kontrollen durch die IDE, diese Regeln sind Heuristiken, die auch unterstütztObjects.equals(Object, Object)
(z.B. IntelliJ IDEA 2016.2 hat die gleiche Prüfung für die normale entspricht und der von Objekten).java.util.Objects
Für diese Fälle wäre es besser, Apache Commons StringUtils#equals es bereits behandelt null-strings. Code-Beispiel:
Wenn Sie nicht möchten, fügen Sie die Bibliothek, kopieren Sie einfach die source code der
StringUtils#equals
Methode und wenden Sie es, wenn Sie es brauchen.Für diejenigen, die auf android, die nicht mit API 19 Objekte.equals(str1, str2), es ist dies:
Es ist null sicher. Es hat selten zu verwenden, die teurer string.equals () - Methode, da identische strings auf android fast immer zu vergleichen, stimmt mit dem "==" operand Dank Android ist String-Pooling, und die Länge überprüft, sind eine schnelle Möglichkeit heraus zu filtern, die meisten Abweichungen.
Source Code:
Seit version 3.5, Apache Commons StringUtils besitzt die folgenden Methoden:
Diese bieten null-sichere String-Vergleich.
Vergleichen von zwei Strings mit equals(-,-) und equalsIgnoreCase(-,-) Methode, die der Apache-Commons-Klasse StringUtils.
StringUtils.gleich(-, -) :
StringUtils.equalsIgnoreCase(-, -) :
ist es das, was Ihr Euch gewünscht?
false
wenn beide Strings sindnull
die möglicherweise nicht das gewünschte Ergebnis.Mit Java 8:
Können Sie
java.util.Objects
wie folgt.OK, also was bedeutet das "bestmögliche Lösung" zu bedeuten?
Wenn du meinst, die meisten lesbar, dann alle möglichen Lösungen sind so ziemlich gleichwertig für einen erfahrenen Java-Programmierer. Aber IMO die meisten lesbar ist dieses
In anderen Worten, verstecken die Umsetzung innerhalb einer einfachen Methode, die (im Idealfall) sein kann, eingebettet.
(Man könnte auch "out-source", um eine 3rd-party-utility library ..., wenn, die Sie bereits verwenden Sie es in Ihrer Codebasis.)
Wenn du meinst performantester, dann:
null
Argumente,