2012-01-11 81 views
55

Tôi đã xem xét một số câu hỏi OCJP giả. Tôi đã gặp một cú pháp thực sự khó hiểu. Dưới đây là:Sự khác nhau giữa! = Và =! trong Java?

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

Tại sao thay đổi đầu ra giữa !==!?

+4

Lưu ý rằng nếu bạn gán 'true' thành b, thì cả hai đều trả về false. –

+16

Không đủ khoảng trắng chỉ là xấu như quá nhiều khoảng trắng –

+0

Cùng một lập trình viên viết Java và C++. Hãy xem http://stackoverflow.com/questions/21029174/whats-this-operator: P –

Trả lời

110

Câu hỏi đặt ra là chỉ chơi với bạn với khoảng cách khó hiểu.

b != b là thông thường so sánh != (không bằng).

Mặt khác:

b =! b được viết tốt hơn như b = !b được phân tách như:

b = (!b) 

Như vậy đó là hai nhà khai thác.

  1. Đảo ngược đầu tiên b.
  2. Sau đó gán lại cho b.

Toán tử gán trả về giá trị đã gán. Do đó, (b =! b) đánh giá là đúng - đó là những gì bạn in ra.

+4

chính xác và chính xác hơn (b =! B) so với (b! = B) – Neutralizer

+2

Tôi không biết bài tập có thể được thực hiện theo cách đó. – prometheuspk

+1

@ Prometheus87 Có, bạn có thể đặt các bài tập trong các câu lệnh. – Mysticial

9

b=!b là một bài tập. Nó chỉ định b đến !b và biểu thức đánh giá thành giá trị kết quả, là true.

3

b =! b

bạn đang thực hiện một bài tập, bạn đang nói rằng B phải có giá trị của! B.

b = b

Bạn đang yêu cầu nếu B là khác nhau hơn b

10

b != b nghĩa ! (b == b): trái ngược với b == b.

b =! b thực sự là b = !b, một bài tập. Nó đang chuyển đổi giá trị của b. Một nhiệm vụ đánh giá giá trị của biểu thức, do đó, điều này sẽ đánh giá là !b (cùng với việc thay đổi giá trị b).

Các vấn đề liên quan