Подтвердить что ты не робот

Два условия в одном утверждении if делают второе дело, если первое ложно?

Хорошо, поэтому у меня есть эта часть кода, и я обнаружил, что исключение не исключено.

public static void main(String[] args) {
    int[] list = {1,2};
    if (list.length>2 && list[3] == 2){
        System.out.println(list[1]);
    }
}

Здесь указано утверждение

if (list.length>2 && list[3] == 2)

означает, что если первое условие ложно, нам даже не нужно проверять второе условие?

Или он равен

if (list.length>2){
    if (list[3] == 2){
        ...
    }
}

?

И что, если он написан на C или python или на некоторых других языках?

Спасибо

4b9b3361

Ответ 1

Обычно для языков (Java и Python являются среди них) для оценки первого аргумента логического AND и завершения оценки выражения, если первый аргумент false. Это происходит потому, что:

От Порядок оценки логических операторов,

Когда Java оценивает выражение d = b && c;, он сначала проверяет, является ли b истинным. Здесь b является ложным, поэтому b && c должно быть ложным независимо от того, является ли c истинным или нет, поэтому Java не проверяет значение c.

Это называется оценка короткого замыкания, а также упоминается в Java docs.

Общеизвестно, что list.count > 0 && list[0] == "Something" проверяет элемент списка, если он существует.


Стоит также отметить, что if (list.length>2 && list[3] == 2) не равен второму случаю

if (list.length>2){
    if (list[3] == 2){
        ...
    }
}

если после этого есть else. else будет применяться только к оператору if, к которому он прикреплен.

Чтобы продемонстрировать эту информацию:

if (x.kind.equals("Human")) {
    if (x.name.equals("Jordan")) {
        System.out.println("Hello Jordan!");
    }
} else {
    System.out.println("You are not a human!");
}

будет работать как ожидалось, но

if (x.kind.equals("Human") && x.name.equals("Jordan")) {
    System.out.println("Hello Jordan!");
} else {
    System.out.println("You are not a human!");
}

также скажет любому Человеку, который не является Jordan, он не человек.

Ответ 2

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

Ответ 3

С javadoc:

Условные операторы

& & и || операторы выполняют Conditional-AND и Conditional-OR операции над двумя булевыми выражениями. Эти операторы демонстрируют "короткое замыкание", что означает, что второй операнд оценивается только при необходимости.

& & Условный-И || Условное ИЛИ

Ответ 4

Да, оба варианта использования семантически эквивалентны... То есть, если длина не равнa > 2, тогда код разрешен для доступа к более чем второму элементу.

В первом случае важно, что оператор &&, подумайте об этом как: Если первое условие истинно, примените второе условие.

Следующее условие также имеет неявное предложение "then"

if length greater than two
 then access third element

Ответ 5

Если первое условие ложно, тогда он не проверяет второе условие как что-либо и & F = F снова это зависит от того, какую бит мудрую операцию вы делаете. как в случае OR (||), если первое условие истинно (T), оно не проверяет второе условие как что-либо || T = T, но если его ложь (F), то он определенно будет проверять второй

Ответ 6

Вы указали в своем утверждении IF, что оба условия должны быть истинны для исполняемого файла System.out.println. Поэтому, если первое условие само сбой, второе условие не проверяется (это для оператора И). Но второе условие будет проверено, если вы указали оператор OR в операторе If.