2017-02-01 2 views
0

Warum, wenn ich versuche, die folgendes zu tun: (in java)Java-String gleich wörtlichen Warnmeldung

if (reason.equals("time")) { // my code } 

Die IDE mir diese Warnmeldung zeigt:

Method Invocation "(?) reason.equals („Zeit“) java.lang.NullPointerException ‚

‘ kann produzieren‘ich konnte nicht eine abstrakte Erklärung zu dieser Warnmeldung finden.

+1

Ihnen zu sagen, dass an diesem Punkt im Code "Grund" "null" sein könnte; und wenn dies der Fall ist, wird Ihr Programm eine Ausnahme auslösen. – khelwood

+0

Wenn Sie wissen, was eine 'NullPointerException' ist, sollte diese Warnung nicht so schwer zu verstehen sein. Daher nehme ich an, dass Sie lesen möchten [Was ist eine NullPointerException und wie behebe ich sie?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do- i-fix-it) – Thomas

Antwort

6

Wenn reasonnull ist, haben Sie im Grunde null.equals("time"), was eine NullPointerException verursacht. Um dies zu beheben, tauschen Sie einfach die beiden aus: "time".equals(reason);

5

Es ist Ihre IDE süß. Wenn reason ist null dann können Sie eine java.lang.NullPointerException bekommen.

Eine häufige Problemumgehung ist die Verwendung java.util.Objects.equals(reason, "time"). Diese Funktion führt alle null Prüfungen für Sie aus.

Obwohl für diesen speziellen Fall, kühlen Katzen zu wissen, dass die wörtliche sicherlich nicht null wird umschreiben ist

zum Yoda Expression

"time".equals(reason)

Referenz: Es ist https://en.wikipedia.org/wiki/Yoda_conditions

+1

"Yoda Expression" - noch nie gehört, dass es vorher so genannt wurde, aber sicherlich passend;) – Thomas

+0

@Thomas: Ich habe eine Referenz hinzugefügt, die zum Zeitpunkt des Schreibens den Java String Case enthält. – Bathsheba