Несколько логических выражений в одном операторе if в java [duplicate]

1

Привет, у меня есть этот пример:

  (1)
  if(false && false ||true){
            System.out.println("a");
  }

результат:

a

а также

  (2)
  if(false && false | true){
            System.out.println("a");
  }

результат:

(empty)

В случае (1) имеем короткое замыкание ИЛИ, но во втором мы имеем длинное замыкание ИЛИ. Откуда происходит различие в поведении? Я знаю, что выражение оценивается слева направо, и И имеет больший приоритет, чем OR, поэтому я не могу понять, почему это происходит в случае 2?

Теги:
boolean
short-circuiting

2 ответа

3
Лучший ответ

(1)

if (false && false || true) {
    System.out.println("a");
}

Здесь && имеет более высокий приоритет, чем ||

  1. false && false получает сначала результат, полученный false.
  2. false || true false || true получает оцениваемый результат true.

Таким образом, результат выводит "a".

(2)

if (false && false | true) {
    System.out.println("a");
}

Здесь | имеет более высокий приоритет, чем &&

  1. false | true false | true сначала оценивается, в результате получается true.
  2. false && true получает оценку, которая возвращает false.

Поэтому ничего не выводится.

Надеюсь, что это имеет смысл

4

&& имеет приоритет над || но не более | , См. Список приоритетов операторов.

  • 0
    ТАК сначала будет подсчитано ложь | true -> true, а затем false && true-> false?
  • 1
    @ Кселиан точно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню