Java中"!="和"=!"有什么区别?

58

我在看一些模拟的OCJP考试题时,遇到了一个非常令人困惑的语法。这里是它:

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

为什么使用 !==! 输出结果会不同?


5
请注意,如果将“true”分配给b,则两者都返回false。 - Mikaël Mayer
19
空白过少和空白过多一样糟糕。 - A Person
同一个程序员编写Java和C++。看看https://dev59.com/e2Ei5IYBdhLWcg3wseGA :P - Bahadir Cambel
4个回答

116

这个问题只是故意搞混你的空格。

b != b 是通常的 != (不等于)比较符号。

另一方面:

b =! b 最好改为 b = !b,其解析方式为:

b = (!b)

因此,这里涉及两个运算符。

  1. 首先对 b 取反。
  2. 然后将其赋回到 b 中。

赋值运算符返回已赋的值。因此,(b =! b) 的结果为真 - 这就是你打印出来的东西。


5
更正并更正确地说,它是指(b = !b)与(b != b)的区别。 - Umair A.
2
我不知道可以用那种方式进行赋值。 - prometheuspk
1
@Prometheus87 是的,你可以在语句中放置赋值。 - Mysticial
3
重要的是,赋值语句会对被赋的变量进行求值,所以 System.out.println(b = !b) 会打印出 !b 赋给 b 后的值。 - Paul Bellora
完美的解释..! - Nirav Dangi
显示剩余2条评论

10

b != b的意思是!(b == b): 它的反义词是b == b

b =! b实际上是一个赋值语句,它会切换b的值。一个赋值语句会计算表达式的值,因此这将计算为!b(并且改变了b的值)。


9

b =!b 是一种赋值。它将 b 赋值为 !b,并且该表达式的值为结果值,即 true


3

b =! b

你在做一项任务,要求B的值应为!B。

b != b

你在问B是否与b不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接