Факторы, которые вступают в игру, - это приоритет операторов, оценка слева направо и особый характер «&&» и «||» «короткого замыкания».
'и' крепче связываетчем «или».
Во-первых, приоритет оператора означает, что выражение эффективно
( (!x) || (y && !z) );
Учитывая выполнение короткого замыкания '||', как только мы узнаем, что !x
верно, правая частьсторона не получает оценку.
Я написал этот хак, чтобы распечатать каждый термин, как он был оценен:
static boolean P(String s, boolean x) { System.out.println(" "+s); return x; }
, а затем заменил каждый логический термин 'b' на вызов P («b», b):
{
... same as before...
System.out.println( P("!x",!x) || (P("y",y) && P("!z",!z)));
}
приводит к выводу
!x
true
примечание: ничего не связано с напечатанным y или z.