java—这个布尔值中的“num”是如何变化的,从而变成6的?

brc7rcf0  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(324)
int num = 5;
if (num != 5 & num++ != 6 | (num = num--) == 6)
System.out.println("true " + num);
else
System.out.println("false " + num);

此代码的输出为“true,6”。我需要帮助理解num如何通过boolean语句计算为数字6。

fhity93d

fhity93d1#

所以这里实际上发生了一些事情。
您的问题的答案是,当java看到num上的时,它总是将其递增1。
此外,如果您试图使用布尔运算,则需要使用&&和| |。单&和|用于位运算。

6uxekuva

6uxekuva2#

正如科林所说,这里实际上发生了很多事情!
让我先取if条件下表达式的一半;

num != 5 & num++ != 6

现在它首先计算num不等于5,即false
第二,计算num不等于6,即true(postincrement)
第三,计算按位and运算符,即false和true
产生结果 false 对于这一半的表达
第四,将num的值从5增加到6
现在是剩下的表达式;

(num = num--) == 6

表达式的这一部分首先计算括号。
这里num—递减num并返回当前为6的旧值。然后这个值被再次赋值给num,这是一个典型的后增量/赋值混淆(请参见https://stackoverflow.com/a/24564625/11226302 (详细说明)
其次,它计算num是否等于 6 ,即, true num的值就是这样计算的 6 在表达式的末尾。
这使得表达式的后半部分 true 在这之后 | 按位包含或运算符优先并计算整个表达式,即

false | true

制造 true .

相关问题