2012-01-11 82 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的值)。

相關問題