Warum ist Null-Überprüfung mit Hilfsvariable Schutz vor NullPointerException
, während direkte Nullprüfung nicht ist?Warum meldet IDEA mögliche NullPointerException?
Betrachten Sie diese zwei Codeblöcke:
public boolean passwordMatch1(Player player, String password) {
if (LoggedPlayer.getLoggedPlayer(player) != null) {
return LoggedPlayer.getLoggedPlayer(player).getPassword().equals(password);
}
return false;
}
und
public boolean passwordMatch2(Player player, String password) {
LoggedPlayer p = LoggedPlayer.getLoggedPlayer(player);
if (p != null) {
return p.getPassword().equals(password);
}
return false;
}
Sie sind genau das gleiche tun, Verfahren passwordMatch2
verwendet Hilfsvariable von LoggedPlayer
p
genannt, während Methode passwordMatch1
prüft direkt auf null.
Methode LoggedPlayer.getLoggedPlayer(Player player)
ist bekannt, null
zurückgeben, wenn keine entsprechende LoggedPlayer
Instanz gefunden wird.
IDEA meldet eine Warnung in passwordMatch1
:
Method Invocation 'getPassword' erzeugen kann ‚java.lang.NullPointerException
während passwordMatch2
keine Warnung hat.
(IntelliJ IDEA Ultimative 2017,2)
Wenn die zugrunde liegende 'LoggedPlayer.getLoggedPlayer()' -Datenstruktur zwischen Aufrufen wechseln kann (wie in einem Multithread-Kontext), könnte der zweite Aufruf in 'passwordMatch1' einen Nullwert zurückgeben. – billie