2012-01-11 23 views
55

Przeglądałem kilka próbnych pytań: OCJP. Natknąłem się na naprawdę kłopotliwą składnię. Oto ona:Jaka jest różnica między! = I =! w Javie?

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

Dlaczego zmiana wyjściowego między != i =!?

+4

Należy pamiętać, że jeśli przypiszesz "true" do b, oba zwracają fałsz. –

+16

Niewystarczające białe znaki są tak samo złe, jak zbyt wiele białych znaków. –

+0

Ten sam programista piszący w językach Java i C++. Spójrz na http://stackoverflow.com/questions/21029174/whats-this-operator: P –

Odpowiedz

110

Pytanie brzmi po prostu z tobą, używając mylących odstępów.

b != b to zwykle porównanie != (nie równe).

Z drugiej strony:

b =! b jest lepiej napisany jako b = !b który jest analizowany jako:

b = (!b) 

Zatem to dwóch operatorów.

  1. Pierwsza inwersja b.
  2. Następnie przypisz go z powrotem do b.

Operator przypisania zwraca przypisaną wartość. Dlatego (b =! b) ma wartość true - czyli to, co wydrukujesz.

+4

poprawne i bardziej poprawne to (b =! B) vs. (b! = B) – Neutralizer

+2

Nie wiedziałem, że zadania mogą zrobić w ten sposób. – prometheuspk

+1

@ Prometheus87 Tak, możesz umieszczać przypisania wewnątrz instrukcji. – Mysticial

9

b=!b to zadanie. Przypisuje ona b do !b, a wyrażenie zwraca wartość wynikową, która jest true.

3

b =! b

wykonujesz zadanie, mówisz, że B powinno mieć wartość! B.

b = b

Pytasz czy B jest inny niż b

10

b != b oznacza ! (b == b): przeciwieństwo b == b.

b =! b jest w rzeczywistości b = !b, zadanie. To przełącza wartość b. Przyporządkowanie jest wartością wyrażenia, więc zostanie to ocenione na !b (wraz z tym, że zmieniono wartość b).

Powiązane problemy