Вопрос

Предположим, у меня есть следующее выражение

String myString = getStringFromSomeExternalSource();
if (myString != null && myString.trim().length() != 0) {
...
}

Затмение предупреждает меня , что myString может быть null во второй фразе логического выражения.Однако я знаю, что некоторые компиляторы полностью завершат логическое выражение, если первое условие не выполняется.Верно ли это с Java?Или порядок оценки не гарантирован?

Это было полезно?

Решение

Однако я знаю, что некоторые компиляторы полностью завершат логическое выражение, если первое условие не выполняется.Верно ли это с Java?

Да, это известно как Оценка короткого замыкания.Операторы , такие как && и || являются операторами, которые выполняют такие операции.

Или порядок оценки не гарантирован?

Нет, порядок оценки гарантирован (слева направо).

Другие советы

Java должна оценивать ваши утверждения слева направо.Он использует механизм, известный как оценка короткого замыкания чтобы предотвратить проверку второго, третьего и n-го условий, если первое равно false.

Итак, если ваше выражение является myContainer != null && myContainer.Contains(myObject) и myContainer равно нулю, второе условие, myContainer.Contains(myObject) не будет оценено.

Редактировать: Как кто-то еще упоминал, Java, в частности, имеет как операторы короткого замыкания, так и операторы без короткого замыкания для логических условий.Используя && вызовет оценку короткого замыкания, и & не будет.

Джеймс и Эд правы.Если вы сталкиваетесь со случаем, в котором вы хотели бы, чтобы все выражения вычислялись независимо от предыдущих неудачных условий, вы можете использовать логический оператор без короткого замыкания &.

Да, Java практикует отложенную оценку операторов if таким образом.если myString==null, остальная часть инструкции if оцениваться не будет

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top