Процесс оценки состояния в Java

Допустим, что у меня есть следующее условие:

if ( myList == null || myList.isEmpty() || xomeX == someY )

Каков порядок оценки этих условий? Влево или вправо, справа налево или случайное каждое время?

Если первая проходит, то остальные игнорируются?

Ответ 1

Он всегда должен быть слева направо, кроме оператора присваивания =. Вы используете оператор короткого замыкания OR, поэтому, если первое условие true, остальные из них не будут оцениваться.

JLS 15.24:

Условный или оператор синтаксически лево-ассоциативный (он группирует слева направо).

Во время выполнения первое выражение первого операнда оценивается; если результат имеет тип Boolean, он подвергается распаковке преобразования (п. 5.1.8).

Если результирующее значение истинно, значение условного выражения или выражения истинно, и выражение правого операнда не оценивается.

Ответ 2

Из JLS

Во время выполнения выражение левого операнда оценивается сначала [...] Если результирующее значение истинно, значение условного выражения или выражения истинно, и выражение правого операнда не оценивается.

Ответ 3

if ( myList == null || myList.isEmpty() || xomeX == someY )

Да оценка слева направо!

и

Если первое условие истинно, следующее условие не оценивается. Эта концепция называется оценкой короткого замыкания. Подробнее об этом здесь. Подобный вопрос SO, опубликованный ранее, короткое замыкание логического оператора Java

Ответ 4

1) слева направо

2) в этом случае, если одно условие истинно, оно не оценивает остальное. поэтому, если myList равно null, он не будет вызывать оценку NullPointerException myList.isEmpty() (потому что он не будет ее оценивать)

Ответ 5

Каждый оператор имеет свой собственный precedence и ассоциативность.

Этих ссылок достаточно, чтобы ответить на ваш вопрос.

Ответ 6

|| является оператором короткого замыкания ИЛИ, что означает, что условия строго оцениваются слева направо, и этот процесс проверки останавливается на первом истинном результате.