【发布时间】:2010-12-21 11:12:45
【问题描述】:
我以为Java有短路评估,但这一行仍然抛出空指针异常:
if( (perfectAgent != null) && (perfectAgent.getAddress().equals(entry.getKey())) ) {
在这种情况下,perfectAgent 是 null,所以我只想让整个表达式返回 false,但我的应用程序仍然在这条线上崩溃并出现 NullPointerException。
编辑,一般回应:
由于perfectAgent 是null,因此&& 右侧的任何内容都不应执行,因为表达式不可能为真。更重要的是,不可能执行perfectAgent.getAddress(),因为perfectAgent 不包含有效的引用(它为空且全部为空)。我正在尝试使用短路评估来不必在单独的语句中检查 null,因为这会使逻辑更加草率。
编辑 2(或者,我是个白痴): 是的,就像生活中的许多事情一样,在向全世界宣布自己是个白痴之后,您就会立即找到答案。在这种情况下,我在执行其他操作时关闭了 Eclipse 的自动构建并且没有重新打开它,所以我正在调试与我的源代码不匹配的类文件。
【问题讨论】:
-
您是否检查过该条目不为空?
-
perfectAgent.getAddress() 是否有可能返回 null?
-
你确定 getAddress() 没有返回 null 吗?
-
您不是在针对较新的源(具有不同的行号)在旧 jar 中调试代码,是吗?我最近被那个咬了……
-
+1 公开说出问题所在,即使这有点尴尬。
标签: java logical-operators short-circuiting