2015-05-22 2 views
2

Привет, у меня есть вопрос относительно таблицы приоритетов в java. Он говорит, что & & имеет более высокий приоритет над ||.Короткие замыкания AND, OR и Приоритет Таблица

boolean b,c,d; 
b = c = d = false; 
boolean e = (b = true) || (c = true) && (d = true); 
System.out.println(b+" "+c+" "+d); 

Когда я запустил упомянутый код, выведите «true false false». почему он не оценивает c = true & & d = истинная часть первая с & & имеет более высокий приоритет? Заранее спасибо

ответ

4

JVM оценивает b = true, который возвращает true. Поэтому выражение

boolean e = (b = true) || (c = true) && (d = true); 

эквивалентно

boolean e = true || (c = true) && (d = true); 

, который всегда приводит к true без необходимости "оценивать" c = true и d = true.

Другими словами, boolean e = (b = true) || (c = true) && (d = true); подобен:

boolean e; 
if(b = true) { 
    e = true; 
} else if((c = true) && (d = true)) { 
    e = true; 
} else { 
    e = false; 
} 
4

Предшествование здесь просто означает, что

X || Y && Z 

эквивалентно:

X || (Y && Z) 

, который выполняет как:

  • Оценка X
  • Если X является true, результат true
  • В противном случае, оценить Y
    • Если Y является ложным, результатом Y && Z является false, поэтому общий результат false
    • В противном случае , оценить Z
    • Если результат true, то Y && Z является true, поэтому общий результат true
    • Если результат false, то Y && Z является false, поэтому общий результат `ложь
+0

Большое спасибо. Я думал, что более высокий приоритет означает (Y && Z) часть получает оценку перед X, поэтому оба Y и Z получают равны true, а JVM не мешает проверять X, так как одна сторона || правда.. –

Смежные вопросы