2014-01-22 3 views
-2

Для любого булева выражения A и B:Порядок булевой оценки

Уиллу & B равна B &

аналогично:

Уиллу | B равно B | A

Спасибо за помощь.

+3

Как насчет фактически ** попробовать ** это? –

+1

'' '' и '&' побитовые. –

ответ

0

Да, те же. Однако, если вы измените & на &&, то они уже не будут такими же.

Например:

int a = 10, b = 0; 

boolean test = false && (a/b == 5); // 1 
boolean test2 = (a/b == 5) && false; // 2 

boolean test3 = false & (a/b == 5); // 3 
boolean test4 = (a/b == 5) & false; // 4 

Оба 3 и 4 будут бросаться ArithmeticException, поэтому они такие же. Однако, в то время как 1 выполнит и сохранит false, результат будет ArithmeticException.

+0

Почему это так? – user2979879

+0

@ user2979879 Добавлен пример; –

0

Если мы говорим о Java, и вы имеете в виду && и ||, то да, эти выражения одинаковы.

0

Вопрос необходимо уточнение.

Если говорить о & & б, когда б методы, это будет следующее:

Сначала будет оцениваться, то б.

а() & & б(): а будем называть первым, а если возвращать ложно, то б() не будет вызываться.

b() & & a(): если b возвращает false, то a не будет вызываться.

Практический пример:

if (obj != null && obj.isXXX()) 

не равна

if (obj.isXXX() && obj != null) 

В первом случае, все будет хорошо. Во втором NullPointerException будет выбрано.

Кроме того, & & б не равные б & & А в случае, когда либо б может изменить состояние.

Смежные вопросы