2016-10-11 8 views
8

Dlaczego ta instrukcja if, z przydziałem i sprawdzaniem równości, ocenia jako fałsz?W jaki sposób instrukcja Java if działa po przypisaniu i sprawdzeniu równości OR - d razem?

public static void test() { 

    boolean test1 = true; 
    if (test1 = false || test1 == false) { 
     System.out.println("Yes"); 
    } else { 
     System.out.println("No"); 
    }  
} 

Dlaczego to drukowanie No?

+0

dlatego w takich sytuacjach należy zawsze używać nawiasów. –

+1

Otrzymana odpowiedź nie wyjaśnia w pełni problemu lub jest martwa. Proszę odnieść się do połączonego pytania, które jest _exactly_ takie same. – Tunaki

Odpowiedz

14

Z powodu operator precedence. Jest to równoznaczne z tym:

boolean test1 = true; 
if (test1 = (false || test1 == false)) { 
... 
} 

część w nawiasach ocenia się false.

+0

@Reign: 'test1 = false' oba ustawia wartość * i * ma wynik," fałsz ". Wynikiem przypisania jest przypisana wartość. –

-1

przypisujesz wartość zmiennej w instrukcji if, ale jej nie używasz. Jeśli chcesz przypisać w if i użytkowania, można to zrobić:

boolean test1; 
if ((test1 = false) == true) { 
    System.out.println("Yes"); 
} else { 
    System.out.println("No"); 
} 
+0

Cóż, na pewno. Ale jeśli zamierzasz coś zmienić, możesz napisać 'boolean test1 = false; System.out.println ("No"); ', i nie byłoby zamieszania. –

+0

Tak, przepraszam, będę edytować: P thx –

-2

Efektem tego kodu drukuje „nie”, jak jesteś przypisywanie 1 Test if następnie jako fałszywą test1 = false wartość false, ponieważ wtedy ocenić test1 == false i inny blok wykona

to może być to, czego szukasz:

if ((test1 == false) || (test1 == false)) //this line if the first answer is true it returns true without checking the seconded statement. 
    // if (test1 == false) would be the, same elauates as true 
    { 
      System.out.println("Yes"); 
     } else { 
     System.out.println("No"); 
    }  

spojrzeć w zwarcia lub operatora to mi GHT pomóc lepiej zrozumieć problem

-1

masz następujące podmioty w wyciągu if, które są priorized tak: równości>logiczną OR>przypisania

if jest następnie zmniejszając w ten sposób :

(test1 = false || test1 == false) //substituing test1 with its value 

(test1 = false || true == false) //evaluating equality 

(test1 = false || false) //evaluating logical OR 

(test1 = false) //evaluating assignment 

(test1) //substituing test1 with its value 

(false) //evaluating primitive value, going to else block 

Stąd drukowania Nie.

+0

Nie. [Java ocenia od lewej do prawej] (https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html# jls-15,7). Przypisanie odbywa się przed równością. –

+0

@AndyTurner Jeśli zadanie zostanie ocenione jako pierwsze, powinno zostać wydrukowane * Tak *, prawda? – Spotted

+0

@AndyTurner '((test1 = fałsz) || test1 == fałsz)' wydrukowałby * Tak *. – Spotted

Powiązane problemy