Является ли следование истине в Java? - PullRequest
2 голосов
/ 05 января 2012

в java следует true:

В java, если вы используете ||, то после получения первого истинного условия оно игнорирует остальные условия.То есть, если вы напишите if(a || b || c) в java, и java находит, что a имеет значение true, тогда он не будет проверять b и c, просто перейдите в регистр if.

Ответы [ 8 ]

3 голосов
/ 05 января 2012

Да, это называется коротким замыканием, если вы поместите менее дорогие чеки влево, вы можете избежать дорогих проверок.

Это работает для || и &&

одно из лучших применений - это проверка значения объекта, который может быть нулевым:

if(myList != null && myList.size() > 6)

предыдущая строка пуста, изменение условия вызовет исключение нулевого указателя в случае, если myList равен нулю

2 голосов
/ 05 января 2012

Это правильно.|| называется оценкой короткого замыкания OR или оператором ИЛИ-ELSE .

Это важно в ситуациях, когда оценка с правой стороны может вызвать нежелательные последствия:

 if (myString == null || myString.indexOf("hello") != -1)
      ...

вылетел бы, если бы не короткое замыкание.

1 голос
/ 05 января 2012

Это правильно, и это не просто лень со стороны языковой реализации, а скорее важная особенность - короткое замыкание позволяет написать что-то вроде этого:

if (myarray.length > 10 && myarray[10] == 5) { /* ... */ }

Здесь второе условие может быть даже оценено , если первое условие истинно. Благодаря короткому замыканию, если первое условие ложно, второе никогда не трогается.

1 голос
/ 05 января 2012

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

0 голосов
/ 05 января 2012

Да, и одна важная вещь , если вы выполните какие-либо операции во второй части, они не будут выполнены. Например:

int a = 5;
int b = 5;
if ( a == b  || a++ == b){
    ...
}
//a = 5
//b = 5

НО в случае:

int a = 3;
int b = 5;
if ( a == b  || a++ == b){
    ...
}
//a = 4
//b = 5

Я пытался сделать простой пример, но иногда вы вызываете метод во второй части (который не будет вызываться, если первая часть была true в случае ||), или первая часть была false в случае &&

0 голосов
/ 05 января 2012

Да, это правильно.Если вы используете |этот оператор проверяет условие ИЛИ, затем проверяет все остальные условия.Он также применяется к оператору AND (&).

0 голосов
/ 05 января 2012

Да, это называется короткое замыкание .Это также приведет к короткому замыканию &&, то есть

 if (a && b && c)

Если a равно false, то условие не может быть истинным, ни b, ни c не проверяются.

Это может быть проблематично, если вы вызываете методы, которые возвращают логические значения.Чтобы обойти это, вы можете использовать побитовые & и |.

0 голосов
/ 05 января 2012

ДА

(AFAIK) То же самое относится к &&, но в обратном порядке (для первого ложного).


То же правило, что и в цепях для AND иИЛИ ворота.

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