Már*_*ner 1 java intellij-idea nullpointerexception
为什么使用辅助变量进行空检查以防止 NullPointerException,而直接空值检查不是?
考虑这两个代码块:
public boolean passwordMatch1(Player player, String password) {
if (LoggedPlayer.getLoggedPlayer(player) != null) {
return LoggedPlayer.getLoggedPlayer(player).getPassword().equals(password);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
和
public boolean passwordMatch2(Player player, String password) {
LoggedPlayer p = LoggedPlayer.getLoggedPlayer(player);
if (p != null) {
return p.getPassword().equals(password);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
它们做的完全一样,方法passwordMatch2使用LoggedPlayer被调用的辅助变量p,而方法passwordMatch1是直接检查null.
LoggedPlayer.getLoggedPlayer(Player player)已知方法null在没有LoggedPlayer找到适当的实例时返回.
IDEA正在报告以下警告passwordMatch1:
方法调用'getPassword'可能会产生'java.lang.NullPointerException
虽然passwordMatch2没有警告.
(IntelliJ IDEA Ultimate 2017.2)
考虑一个可能(但很糟糕)的实现LoggedPlayer.getLoggedPlayer.
public static LoggedPlayer getLoggedPlayer(Player player) {
return Math.random() < 0.500 ? new LoggedPlayer() : null;
}
Run Code Online (Sandbox Code Playgroud)
也就是说,getLoggedPlayer可能不是纯粹的,并且它的单独调用可能返回不同的值.
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |