java增量和减量不起作用
为什么此代码的结果是0和1?有人能解释一下这个代码吗
如何在true
或false
之间更改条件:if (b = !b)
的结果
代码:
public class Atomicity extends Thread {
volatile static int i;
boolean b;
public void run() {
while (true) {
if (b = !b) i++;
else i--;
}
}
public static void main(String[] args) {
//new Atomicity().start();
new Atomicity().start();
while (true)
System.out.println(i);
}
}
# 1 楼答案
您正在if语句中使用赋值运算符:
表情
包含赋值运算符(=),而不是比较运算符(=)。分配给b一个新的值!并返回该新值
现在的问题是你想做什么。您当前的代码将继续切换b的值。当然,在这里使用比较将始终返回false(b==!b),因此这也没有用
# 2 楼答案
虽然其他人已经给出了答案,但我将尝试深入解释这里发生了什么
当您这样做时:
如果
b
为true
,则表达式将被计算为true
,并且将满足If条件见JLS:
但是在下一次迭代中,
b
将是false
,那么该条件将不满足,因为赋值运算符将返回false
值得一提的是,强烈建议对单行表达式使用
{
和}
# 3 楼答案
b = !b
将b
从true
更改为false
,反之亦然如果
b
被赋值true
,则if (b = !b)
的计算结果为true
因此,运行此条件是一个循环,它将
b
从false
交替到true
,并且还交替if
条件的结果