Для любого булева выражения A и B:Порядок булевой оценки
Уиллу & B равна B &
аналогично:
Уиллу | B равно B | A
Спасибо за помощь.
Для любого булева выражения A и B:Порядок булевой оценки
Уиллу & B равна B &
аналогично:
Уиллу | B равно B | A
Спасибо за помощь.
Да, те же. Однако, если вы измените &
на &&
, то они уже не будут такими же.
Например:
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
.
Почему это так? – user2979879
@ user2979879 Добавлен пример; –
Если мы говорим о Java, и вы имеете в виду &&
и ||
, то да, эти выражения одинаковы.
Вопрос необходимо уточнение.
Если говорить о & & б, когда б методы, это будет следующее:
Сначала будет оцениваться, то б.
а() & & б(): а будем называть первым, а если возвращать ложно, то б() не будет вызываться.
b() & & a(): если b возвращает false, то a не будет вызываться.
Практический пример:
if (obj != null && obj.isXXX())
не равна
if (obj.isXXX() && obj != null)
В первом случае, все будет хорошо. Во втором NullPointerException будет выбрано.
Кроме того, & & б не равные б & & А в случае, когда либо б может изменить состояние.
Как насчет фактически ** попробовать ** это? –
'' '' и '&' побитовые. –