gpt4 book ai didi

java - Java 中的运算符优先级变得困惑

转载 作者:行者123 更新时间:2023-12-01 18:54:17 25 4
gpt4 key购买 nike

我设置了类似的question几周前,但我仍然无法消除 java operators precedence 上的歧义和困惑。 。这次我有这段代码:

int mask = 0;
int count = 0;
if( ((5<7) || (++count < 10)) | mask++ < 10 )
mask = mask + 1;
System.out.println(mask + " " + count);

结果是(出乎我意料):2 0。

此外,编译器会提供一条警告,仅在表达式 (++count<10) 下划线:死代码。

但是我认为代码的执行可以采用以下方式之一:

1) |优先级高于 ||,因此被认为是表达式周围有括号 ((++count<10) | mask++ <10)。这样编译器应该已经执行了这两个部分,并且 count 应设置为 1 (++count<10)。

2) 如果编译器首先查看 (5<7),并在将其计算为 false 后跳过整个第二个表达式,则不应增加 mask,我们将等待输出中的值 1。

我误解了什么并且无法解释编译器的行为以及输出?

最佳答案

||OR仅当左侧表达式为 false 时才计算其右侧表达式的运算符。在你的情况下,5 < 7是真的并且 ++count < 10未进行评估。

另一方面,|始终计算两个表达式:即使 ((5<7) || (++count < 10))是真的,mask++ < 10将进行评估。

关于java - Java 中的运算符优先级变得困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14684626/

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