2012-01-11 100 views
55

我正在看一些模拟OCJP问题。我遇到了一个令人困惑的语法。那就是:!=和=!有什么区别!在Java中?

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

为什么!==!之间的输出变化?

+4

请注意,如果您给b赋值'true',则两者都返回false。 – 2014-01-10 07:15:32

+16

没有足够的空白和太多的空白一样坏 – 2014-01-10 08:18:00

+0

编写Java和C++的同一个程序员。看看http://stackoverflow.com/questions/21029174/whats-this-operator:P – 2014-02-01 13:40:35

回答

110

这个问题只是与你一起玩混乱的间距。

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

在另一方面:

b =! b更好写成b = !b被解析为:

b = (!b) 

因此它的两家运营商。

  1. 第一次翻转b
  2. 然后将其重新分配给b

赋值运算符返回分配的值。因此,(b =! b)评估为真 - 这是你打印出来的。

+4

正确和更正确它是(b =!b)与(b!= b) – Neutralizer 2012-01-11 20:06:48

+2

我不知道任务可能这样做。 – prometheuspk 2012-01-11 20:10:37

+1

@ Prometheus87是的,你可以把任务放在陈述中。 – Mysticial 2012-01-11 20:11:40

9

b=!b是一项任务。它将b分配给!b,并将表达式评估为结果值,即true

3

b =! b

你正在做一项任务,你是说B应该有!B的价值。

B =

你问如果B是除B

10

b != b装置! (b == b)不同:的b == b相反。

b =! b实际上是b = !b,一项任务。这是切换b的价值。赋值将评估为表达式的值,因此它将评估为!b(同时更改了b的值)。