作者:PHP大傻子 | 来源:互联网 | 2023-01-22 22:41
为什么使用辅助变量进行空检查以防止 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)
已知方法null
在没有LoggedPlayer
找到适当的实例时返回.
IDEA正在报告以下警告passwordMatch1
:
方法调用'getPassword'可能会产生'java.lang.NullPointerException
虽然passwordMatch2
没有警告.
(IntelliJ IDEA Ultimate 2017.2)
1> Nick..:
考虑一个可能(但很糟糕)的实现LoggedPlayer.getLoggedPlayer
.
public static LoggedPlayer getLoggedPlayer(Player player) {
return Math.random() <0.500 ? new LoggedPlayer() : null;
}
也就是说,getLoggedPlayer
可能不是纯粹的,并且它的单独调用可能返回不同的值.