有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java增量和减量不起作用

为什么此代码的结果是0和1?有人能解释一下这个代码吗

如何在truefalse之间更改条件: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);
    }
}

共 (3) 个答案

  1. # 1 楼答案

    您正在if语句中使用赋值运算符:

    if (b = !b) i++;
    

    表情

    b = !b
    

    包含赋值运算符(=),而不是比较运算符(=)。分配给b一个新的值!并返回该新值

    现在的问题是你想做什么。您当前的代码将继续切换b的值。当然,在这里使用比较将始终返回false(b==!b),因此这也没有用

  2. # 2 楼答案

    虽然其他人已经给出了答案,但我将尝试深入解释这里发生了什么

    当您这样做时:

    if(b = !b)
    

    如果btrue,则表达式将被计算为true,并且将满足If条件

    JLS

    At run-time, the result of the assignment expression is the value of the variable after the assignment has occurred.

    但是在下一次迭代中,b将是false,那么该条件将不满足,因为赋值运算符将返回false

    值得一提的是,强烈建议对单行表达式使用{}

  3. # 3 楼答案

    b = !bbtrue更改为false,反之亦然

    如果b被赋值true,则if (b = !b)的计算结果为true

    因此,运行此条件是一个循环,它将bfalse交替到true,并且还交替if条件的结果