2015-04-29 2 views
0

При оценке выражения (x==y && a<b) сначала вычисляется булево выражение x==y, а затем оценивается a<b. Правда или ложь????How && if loop Expression evaluation?

Пожалуйста, объясните, что работает на то же самое. Я довольно смущен этим выражением.

+1

Да, хотя 'a

ответ

2

& & оператор оценивает слева направо

Если первая оценивает х == у первого, а затем < б, однако есть улов здесь. Если x == y имеет значение false, в любом случае все выражение имеет тенденцию отклоняться, поэтому значение < b не будет оцениваться. Это основная оптимизация, которую мы получаем, когда используем & &.

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

(x==y & a<b) 

Проверьте следующие примеры:

int x=10,y=9,count=0; 
    if(x==y && ++count == 0){ 
     System.out.println("true"); 
    } 
    System.out.println(count); 

выход будет 0 в этом случае

int x=10,y=9,count=0; 
    if(x==y & ++count == 0){ 
     System.out.println("true"); 
    } 
    System.out.println(count); 

Выход будет 1 дюйм есть случай. Проверьте оператор тщательно, мы использовали &

0

x==y оценивается и только если это правда, будет a<b оцениваться

2

Для && (условно-А): -

x==y будет оценивает первый и, если это тогда он будет оценивать a<b. как условно - и оценивайте слева направо.

И если вы используете только & operatore: - (и оператор)

В этом случае, как условие будет оцениваться. независимо от первого условия (левое условие), терпят неудачу или проходят.

0

& & (as AND) и || (как OR) сначала оценивают левое выражение и только если это необходимо, продолжайте оценивать второе выражение.

Например:

  • Ложные & & Все всегда будет возвращать ложных без оценки secong выражения.
  • True || Все, что всегда будет возвращать Правда

Вы также можете использовать & и |, которая оценивает оба выражения. (Если второе выражение вызывает исключение, оценка завершится неудачно.) Если вам нужна более быстрая и надежная оценка, используйте & & и ||.

0

&& будет оценивать слева направо. Левое выражение для оператора && сначала вычисляется, если оно выполняется в false, тогда правильное выражение никогда не оценивается и если левое выражение истинно, чем оценивается правильное выражение.

0

&& обрабатывается слева направо. Если первым аргументом является false, другие аргументы игнорируются. Он будет обрабатывать аргументы справа тогда и только тогда, когда верны все аргументы слева. Он известен как short-circuiting.

В вашем случае, если x==y является ложным, тогда a<b не будет оцениваться.