热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么IDEA报告可能的NullPointerException?

如何解决《为什么IDEA报告可能的NullPointerException?》经验,为你挑选了1个好方法。

为什么使用辅助变量进行空检查以防止 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可能不是纯粹的,并且它的单独调用可能返回不同的值.


推荐阅读
author-avatar
PHP大傻子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有