我在看一些模拟OCJP问题。我遇到了一个令人困惑的语法。这里是:

class OddStuff {
    public static void main(String[] args) {
        boolean b = false;
        System.out.println((b != b));// False
        System.out.println((b =! b));// True
    }
}

为什么输出之间会发生变化!==!

答案

问题只是与您一起玩,使间距令人困惑。

b != b是通常的!=(不是平等)比较。

另一方面:

b =! b更好地写作b = !b被解析为:

b = (!b)

因此,这是两个操作员。

  1. 首先反转b
  2. 然后将其分配给b

分配操作员返回分配的值。所以,(b =! b)评估为true-这是您打印的内容。

来自: stackoverflow.com