Давайте возьмем пример выражения:
boolExp1 || boolExp2 && boolExp3 || boolExp4
Теперь мы считаем, что действует как:
boolExp1 || (boolExp2 && boolExp3) || boolExp4
право
Итак, давайте предположим, что напротив истинно, и на самом деле
(boolExp1 || boolExp2) && (boolExp3 || boolExp4)
Какие значения boolExp1
и т. Д. Дадут нам разные результаты?
Хорошо, давайте возьмем:
boolExp1 = true
boolExp2 = false
boolExp3 = false
boolExp4 = false
В соответствии с правилами "&& имеет более высокий приоритет" результат будет истинным. В соответствии с «|| имеет более высокие правила приоритета», результат будет ложным. Быстрый тест показывает, что выражение оценивается как истинное.
Конечно, это не доказывает, что && имеет более высокий приоритет, чем || - просто это || не имеет более высокого приоритета, чем &&. Мы могли бы рассмотреть, имеют ли они равный приоритет, - и проверить это аналогичным образом с другими выражениями ... найти образец выражения и значения, которые дали бы разные результаты при разных правилах приоритета, и проверить их.
В конечном счете, я предпочитаю:
- Доверять спецификации, если у меня нет особых сомнений
- Использование скобок, чтобы прояснить мои намерения
Во-первых, я бы не использовал первое выражение "как есть" ... потому что, если вы на самом деле не знаете правил приоритета (и я подозреваю, что многие разработчики Java не - я не смог клянусь, что я бы понял && и || правильно) ты в темноте. Лучше сделать это ясно и ясно, где есть какие-либо сомнения.