gpt4 book ai didi

Java boolean 表达式行为

转载 作者:搜寻专家 更新时间:2023-10-31 08:20:34 24 4
gpt4 key购买 nike

这是我在这里的第一篇文章,所以请原谅任何协议(protocol)错误。

我的问题只是想了解以下 Java 代码发生了什么。我完全理解使用括号可以澄清一切,但结果输出似乎与有关 Java 操作顺序的约定背道而驰。

public class Tester
{
public static void main(String[] args)
{
int total=9, num=13;
if (total>4 || ++num>15 && total>0)
{
System.out.println("short");
}
System.out.println(num);
}
}

输出是:短的13

很明显++num没有执行。如果遵守严格的操作顺序,这应该是第一件事。它没有。接下来是&&。如果 && 是按优先于 || 的顺序完成的,那么同样...++num 应该首先发生。它没有。所以,对我来说,输出似乎是由 || 决定的首先执行,shortciruiting++num,然后使用 &&,导致 short 被打印。是否简单地忽略了操作规则的顺序并且从左到右执行 boolean 表达式?增量运算符是否导致不规则行为?

感谢您了解这段代码的实际情况。

最佳答案

这与优先级/关联性(它处理如何解析表达式)无关……这与 Java 求值顺序有关——从左到右。您似乎误解了短路逻辑的工作原理。

The && and || operators perform Conditional-AND and Conditional-OR operations on two boolean expressions. These operators exhibit "short-circuiting" behavior, which means that the second operand is evaluated only if needed.


现在,让我们尝试逐步计算这个表达式...

total > 4 || ++num > 15 && total > 0

由于 total > 4 的计算结果为 true,条件的计算结果为 true 并且采用 if 分支立即而不是评估其余的条件。

如果将 total 更改为等于 4,则短路 OR 的左操作数 (total > 4) 为 false,因此它计算右操作数 (++num > 15 && total > 0)。

如果将 num 更改为等于 15,则短路 AND 左操作数 (++num > 15) 的计算结果为true,因此它最终评估 AND 右操作数 (total > 0) 以确定条件是否为 true。如果 total > 0 为 false,则条件也为 false

下面是为清楚起见重写的代码以突出流程。

if (total > 4) {
System.out.println("short");
} else {
if (++num > 15) {
if (total > 0) {
System.out.println("short");
}
}
}
System.out.println(num);

您可以在 relevant Java Tutorial 中阅读有关 Java 条件运算符的更多信息.

关于Java boolean 表达式行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11838129/

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