2-я версия использует оператор без короткого замыкания & и выдает NullPointerException if input is null, но 1-я версия вернет false без исключения.
Ответ 2
SET A использует логические операторы короткого замыкания.
Что означает "короткое замыкание" в контексте логических операторов, так это то, что для набора логических значений b1, b2, ..., bn версии короткого замыкания прекратят вычисление, как только первое из этих логических значений станет true (||) или false (&&).
Например:
// 2 == 2 will never get evaluated because it is already clear from evaluating // 1 != 1 that the result will be false. (1 != 1) && (2 == 2)
// 2 != 2 will never get evaluated because it is already clear from evaluating // 1 == 1 that the result will be true. (1 == 1) || (2 != 2)
Ответ 3
Короткое замыкание означает, что второй оператор не будет проверен, если первый оператор решит конечный результат.
Например. Выражение: True || False
В случае || все, что нам нужно, это, чтобы одна из сторон была истинной. Итак, если левая часть имеет значение true , нет смысла проверять правую часть, и, следовательно, это вообще не будет проверяться.
Аналогично, False && True
В случае && нам нужно, чтобы обе стороны были истинными. Итак, если левая часть равна False, нет смысла проверять правую часть, ответ должен быть False . И, следовательно, это вообще не будет проверяться.
Ответ 4
booleana= (x < z) && (x == x);
Этот тип приведет к короткому замыканию, что означает, что если (x < z) вычисляется как false, то последнее не вычисляется, a будет false, в противном случае && также будет вычисляться (x == x).
& это побитовый оператор, но также логический оператор AND, который не приводит к короткому замыканию.
Вы можете протестировать их следующим образом (посмотрите, сколько раз вызывается метод в каждом случае):