- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我以为 Java 有短路评估,然而这一行仍然抛出一个空指针异常:
if( (perfectAgent != null) && (perfectAgent.getAddress().equals(entry.getKey())) ) {
在这种情况下,perfectAgent
是 null
,所以我只想让整个表达式返回 false
,但我的应用程序仍然崩溃与 NullPointerException 一致。
编辑,一般回复:
由于 perfectAgent
为 null
,因此不应执行 &&
右侧的任何内容,因为表达式不可能为真.更重要的是,不可能执行 perfectAgent.getAddress()
,因为 perfectAgent
不包含有效引用(它为 null 和 all)。我正在尝试使用短路评估,而不必在单独的语句中检查 null,因为这会使逻辑更加草率。
编辑 2(或者,我是个白痴):是的,就像生活中的许多事情一样,你在向全世界宣布你是个白痴后马上就会找到答案。在这种情况下,我在执行其他操作时关闭了 Eclipse 的自动构建,并且没有将其重新打开,因此我正在调试与我的源代码不匹配的类文件。
最佳答案
如果 perfectAgent
确实为 null,则该代码不会 抛出异常(至少假设没有发生奇怪的线程事情,将其从非null 到 null 表达式的一半)。如果您能制作一个简短但完整的程序来演示它这样做,我会感到非常震惊。
所以是的,您的直觉是正确的 - 这应该不是问题。在别处寻找原因。我强烈怀疑 perfectAgent
实际上不是 null,并且您在该代码中遇到了可能导致异常的任何其他情况。
我建议您尝试将那部分代码提取到一个简短但完整的示例中 - 如果您可以这样做,我会吃掉我的隐喻帽子;如果没有,您有望在尝试提取时发现问题。
是什么让您认为 perfectAgent
真的是 null?尝试在它之前插入此代码:
if (perfectAgent == null)
{
System.out.println("Yup, it's null");
}
另一个非常非常小的可能性是您遇到了 JIT 错误 - 但我非常怀疑。
关于Java短路评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1816776/
考虑 function foo(x) x isa Bar || throw(ArgumentError("x is not a Int64...")) dosomething(x) e
这个问题在这里已经有了答案: AndAlso/OrElse in VBA (8 个回答) 7年前关闭。 VBA 不会短路 VBA 不支持短路 - 显然是因为它只有按位 And/Or/Not 等操作。来
这个问题在这里已经有了答案: Java operator precedence guidelines (6 个答案) 关闭 7 年前。 你好,我有一个关于 java 中的优先级表的问题。它说 &&
a &= foo(); 只是被 C++ 中的 a = a && foo(); 取代还是还有更多内容? 我关心的是 foo() 的计算。如果 a 为假,它会被调用吗? 最佳答案 && 是否有嵌入式短路:
我正在尝试注释以下代码。 当同时定义了 zone 和 zones 时,或者当定义了 file 时(但不是同时定义了两者),该函数将起作用: def get_file(zone: str, zones:
给定远程beam.smp服务的已知TCP端口和名称,以及已知的cookie,是否可以短路Erlang分发协议(protocol)的Erlang端口映射器守护进程握手阶段并直接建立Erlang shel
我正在尝试注释以下代码。 当同时定义了 zone 和 zones 时,或者当定义了 file 时(但不是同时定义了两者),该函数将起作用: def get_file(zone: str, zones:
我需要从第二个表中查询数据,但前提是满足主表中的一组罕见条件: SELECT ..., IF(a AND b AND c AND (SELECT 1 FROM tableb ...)) FROM ta
如标题所述,我想将 onchange 短路(在选择内部)。我有以下代码,但我只想发送一个硬编码值而不显示选择框。 "> [编辑] 对不起,我不清楚。我什至不想提供
我是 C++ 的新手,很好奇编译器如何处理 bool 值的惰性求值。例如, if(A == 1 || B == 2){...} 如果 A 确实等于 1,那么 B==2 部分是否曾经计算过? 最佳答案
我在尝试让这个 linq 语句起作用时遇到了一些麻烦。我正在使用 linq 查询设置搜索。我想要做的是,如果搜索为空或为空,让它忽略过滤的那一部分。所以我设置了很多 where 子句来缩短 where
这个问题在这里已经有了答案: How to short-circuit a reduce() operation on a Stream? (4 个答案) 关闭 4 年前。 在做项目的时候写了这行,
首先,我不是 Bash 专家。几个月前我发现,如果我同时使用 && 和 || 短路运算符和花括号,那么如果第一个语句以真实值退出,如果 true block 中的最后一条语句退出非零,那么 fail
我有一个使用逻辑 OR 运算符的 NSPredicate,如下所示: NSPredicate(format: "activeFrom == NULL OR %@ >= activeFrom", som
我是 C++ 的新手,很好奇编译器如何处理 bool 值的惰性求值。例如, if(A == 1 || B == 2){...} 如果 A 确实等于 1,那么 B==2 部分是否曾经计算过? 最佳答案
我需要从第二个表中查询数据,但前提是满足主表中的一组罕见条件: SELECT ..., IF(a AND b AND c AND (SELECT 1 FROM tableb ...)) FROM ta
我遇到了这段代码: 我想我们可以归纳为: 然后我找到了这个 article on short circuits和另一个 more focused one一旦我知道他们叫什么。但是,我还是不明白。
据我了解和阅读,您可以在 if 语句(&& 或 ||)中使用短路,以使第二个条件不触发。如果您希望两个条件都触发,您可以使用单个操作数(& 或 |)。 假设我有如下内联 if 语句: var test
在玩弄编译时字符串(char 的可变参数列表)操作时,我需要实现一种方法来检查编译时字符串是否包含另一个(较小的)编译时字符串。 这是我的第一次尝试: template struct Contains
如果我有以下... a OrElse b ... 并且 a 是 真那么显然 b 永远不会被评估。但是如果我添加一个 Or ,然后呢? a OrElse b Or c c 是否/应该得到评估?如果我放入
我是一名优秀的程序员,十分优秀!