几周前我提出了一个类似的问题,但我仍然无法消除对java 运算符优先级的歧义和混淆。这次我有这段代码:
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 之后跳过整个第二个表达式,那么掩码不应该增加,我们将在输出中等待值 1。
我误解了什么并且无法解释编译器的行为以及输出?