gpt4 book ai didi

Java短路评估

转载 作者:太空狗 更新时间:2023-10-29 22:39:10 26 4
gpt4 key购买 nike

我以为 Java 有短路评估,然而这一行仍然抛出一个空指针异常:

if( (perfectAgent != null) && (perfectAgent.getAddress().equals(entry.getKey())) ) {

在这种情况下,perfectAgentnull,所以我只想让整个表达式返回 false,但我的应用程序仍然崩溃与 NullPointerException 一致。

编辑,一般回复:

由于 perfectAgentnull,因此不应执行 && 右侧的任何内容,因为表达式不可能为真.更重要的是,不可能执行 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com