Wie kann ich eine Zeichenfolge in Java gegen Null prüfen? ich benutze
stringname.equalsignorecase(null)
aber es funktioniert nicht.
string == null
vergleicht, ob das Objekt null ist. string.equals("foo")
vergleicht den Wert innerhalb dieses Objekts. string == "foo"
funktioniert nicht immer, weil Sie versuchen zu sehen, ob die Objekte gleich sind, nicht die Werte, die sie darstellen.
Längere Antwort:
Wenn Sie dies versuchen, funktioniert es nicht, wie Sie festgestellt haben:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
Der Grund ist, dass foo null ist und daher nicht weiß, was .equals ist. Es gibt dort kein Objekt, von dem .equals aufgerufen werden können.
Was Sie wahrscheinlich wollten, war:
String foo = null;
if (foo == null) {
// That will work.
}
Der typische Weg, sich im Umgang mit Strings vor einer Null zu schützen, ist:
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
Auf diese Weise wird, wenn foo null war, die zweite Hälfte der Bedingung nicht bewertet, und alles ist in Ordnung.
Wenn Sie ein String-Literal (anstelle einer Variablen) verwenden, ist der einfache Weg:
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
Wenn Sie das umgehen möchten, verfügt Apache Commons über eine Klasse - StringUtils -, die null-sichere String-Operationen bereitstellt.
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
Eine andere Antwort war ein Scherz und sagte, dass Sie dies tun sollten:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
Bitte tu das nicht. Sie sollten nur Ausnahmen für außergewöhnliche Fehler auslösen. Wenn Sie eine Null erwarten, sollten Sie diese im Voraus prüfen und nicht zulassen, dass sie die Ausnahme auslöst.
In meinem Kopf gibt es zwei Gründe dafür. Erstens sind Ausnahmen langsam; Das Prüfen gegen Null ist schnell, aber wenn die JVM eine Ausnahme auslöst, dauert es sehr lange. Zweitens ist der Code viel einfacher zu lesen und zu warten, wenn Sie nur vorher nach dem Nullzeiger suchen.
wird nicht funktionieren?
quelle
equals()
wenn Sie Werte vergleichen möchten . Wenn Sie jedoch überprüfen möchten, ob eine Variable vorhanden istnull
, verwenden Sie==
.Sicher funktioniert es. Sie verpassen einen wichtigen Teil des Codes. Sie müssen nur so vorgehen:
;)
quelle
Verwenden Sie die TextUtils-Methode, wenn Sie in Android arbeiten.
TextUtils.isEmpty (str) : Gibt true zurück, wenn der String null oder 0 lang ist. Parameter: str die zu untersuchende Zeichenfolge Rückgabe: true, wenn str null oder null ist
Unten finden Sie den Quellcode dieser Methode. Sie können direkt verwenden.
quelle
Wenn wir uns die Implementierung der equalsIgnoreCase-Methode ansehen, finden wir diesen Teil:
Es wird also immer zurückgegeben,
false
wenn das Argument lautetnull
. Und das ist offensichtlich richtig, denn der einzige Fall, in dem es zurückkehren sollte,true
ist, wenn equalsIgnoreCase auf einemnull String
, aber aufgerufen wurdewird definitiv zu einer NullPointerException führen.
Gleiche Methoden dienen also nicht dazu, zu testen, ob ein Objekt null ist, nur weil Sie sie nicht aufrufen können
null
.quelle
Das sieht ein bisschen seltsam aus, aber ...
Es gab noch nie Probleme, dies auf diese Weise zu tun. Außerdem ist dies eine sicherere Möglichkeit, dies zu überprüfen und mögliche Nullpunktausnahmen zu vermeiden.
quelle
Ich bin mir nicht sicher, was mit der Antwort von The MYYN falsch war.
Die obige Nullprüfung ist in Ordnung.
Wenn Sie versuchen zu überprüfen, ob eine Zeichenfolgenreferenz einer anderen Zeichenfolge entspricht (Groß- und Kleinschreibung ignorieren), von der Sie wissen, dass sie keine Nullreferenz ist, gehen Sie wie folgt vor:
Wenn Zweifel bestehen, ob Sie für beide zu vergleichenden Zeichenfolgen Nullreferenzen haben oder nicht, müssen Sie mindestens eine auf Nullreferenz prüfen, um die Möglichkeit einer NullPointerException zu vermeiden.
quelle
Wenn Ihre Zeichenfolge den Wert "null" hat, können Sie verwenden
quelle
importiere es in deine Klasse
Verwenden Sie es dann, beide geben true zurück
quelle
Sie können mit String == null überprüfen
Das funktioniert bei mir
quelle
Natürlich wird user351809
stringname.equalsignorecase(null)
eine NullPointerException auslösen.Sie haben ein Zeichenfolgenobjekt
stringname
, das zwei möglichen Bedingungen folgt: -stringname
hat einen Wert ungleich Null (z. B. "Computer"):Ihr Code funktioniert einwandfrei, da er die Form annimmt
"computer".equalsignorecase(null)
und Sie die erwartete Antwort als erhalten
false
.stringname
hat einennull
Wert:Hier bleibt Ihr Code hängen, da er
null.equalsignorecase(null)
jedoch auf den ersten Blick gut erscheint und Sie hoffen können, dass die Antwort als
true
,aber
null
kein Objekt ist, das dieequalsignorecase()
Methode ausführen kann .Daher erhalten Sie die Ausnahme aufgrund von Fall 2.
Ich schlage vor, Sie verwenden einfach
stringname == null
quelle
Einfache Methode:
quelle
Wenn die
value
Rückgabe null ist, verwenden Sie:Irgendwann, um null zu überprüfen, gibt es
if(value == null)
in Java möglicherweise nicht true, selbst wenn der String null ist.quelle
if(value.isEmpty())
gibtNullPointerException
. In diesem Fall ist es besser mitif(value == null)
Mit Java 7 können Sie verwenden
Dies wird zurückgegeben,
true
wenn beide Parameter sindnull
.quelle
Mir ist klar, dass dies vor langer Zeit beantwortet wurde, aber ich habe dies noch nicht gesehen, also dachte ich, ich würde teilen, was ich tue. Dies ist nicht besonders gut für die Lesbarkeit von Code, aber wenn Sie eine Reihe von Nullprüfungen durchführen müssen, verwende ich gerne:
In diesem Beispiel wird trim für die Zeichenfolge aufgerufen, wodurch eine NPE ausgelöst wird, wenn die Zeichenfolge null oder Leerzeichen ist. In derselben Zeile können Sie jedoch nach null oder leer suchen, damit Sie nicht mit einer Tonne (mehr) enden ) schwer zu formatieren, wenn Blöcke.
quelle
Wenn ich es richtig verstehe, sollte es das tun:
quelle
Nun, das letzte Mal, als jemand diese dumme Frage stellte, war die Antwort:
Diese "Korrektur" verbirgt jedoch nur das größere Problem, wie es überhaupt
null
wird"null"
.quelle
Es gibt zwei Möglichkeiten, dies zu tun. Sagen Sie String == null oder string.equals () .
Überprüfen Sie dieses Beispiel. Hier ist ein weiteres Beispiel für eine Verknüpfungsversion von If Else.
quelle