爲什麼使用輔助變量進行空檢查針對NullPointerException
進行保護,而直接空檢查不是?爲什麼IDEA報告可能存在NullPointerException?
考慮這些代碼兩大塊:
public boolean passwordMatch1(Player player, String password) {
if (LoggedPlayer.getLoggedPlayer(player) != null) {
return LoggedPlayer.getLoggedPlayer(player).getPassword().equals(password);
}
return false;
}
和
public boolean passwordMatch2(Player player, String password) {
LoggedPlayer p = LoggedPlayer.getLoggedPlayer(player);
if (p != null) {
return p.getPassword().equals(password);
}
return false;
}
他們正在做同樣的事情,方法passwordMatch2
使用的LoggedPlayer
稱爲p
輔助變量,而方法passwordMatch1
直接檢查null。
方法LoggedPlayer.getLoggedPlayer(Player player)
已知當找不到合適的LoggedPlayer
實例時返回null
。
想法是在passwordMatch1
報告警告:
方法調用 'getPassword來' 可能會產生 「顯示java.lang.NullPointerException
而passwordMatch2
沒有警告。
(的IntelliJ IDEA終極2017.2)
如果底層的'LoggedPlayer.getLoggedPlayer()'數據結構能夠在不同的調用之間進行切換(如在多線程上下文中),那麼'passwordMatch1'中的第二次調用可能會返回空值。 – billie