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。
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。
2条答案
按热度按时间fhity93d1#
所以这里实际上发生了一些事情。
您的问题的答案是,当java看到num上的时,它总是将其递增1。
此外,如果您试图使用布尔运算,则需要使用&&和| |。单&和|用于位运算。
6uxekuva2#
正如科林所说,这里实际上发生了很多事情!
让我先取if条件下表达式的一半;
现在它首先计算num不等于5,即false
第二,计算num不等于6,即true(postincrement)
第三,计算按位and运算符,即false和true
产生结果
false
对于这一半的表达第四,将num的值从5增加到6
现在是剩下的表达式;
表达式的这一部分首先计算括号。
这里num—递减num并返回当前为6的旧值。然后这个值被再次赋值给num,这是一个典型的后增量/赋值混淆(请参见https://stackoverflow.com/a/24564625/11226302 (详细说明)
其次,它计算num是否等于
6
,即,true
num的值就是这样计算的6
在表达式的末尾。这使得表达式的后半部分
true
在这之后|
按位包含或运算符优先并计算整个表达式,即制造
true
.