В чем разница операций?
Учу java и решаю незамысловаты задачки на разных сайтах. Так вот одна мне сломала голову, точнее даже две.
- Какое значение будет иметь переменная number после выполнения этого кода?
int number = 5;
if(++number > 5 | ++number > 6)
number++;
// Ответ 8**
- Какое значение будет иметь переменная number после выполнения этого кода?
int number = 5;
if(++number > 5 || ++number > 6)
number++;
// Ответ 7**
Тут два оператора или || и |. В чем их разница?
Ответы (2 шт):
| - побитовый оператор или, в этом случае производится операция "побитовое или" между операндами, чтобы её посчитать, нужно выполнить и левый операнд и правый
|| - логический оператор или, с логическими операторами среда исполнения использует оптимизации - если для вычисления истины или ложности достаточно выполнения левого операнда, то правый операнд не вычисляется, что и происходит в вашем случае (левый операнд истинен - значит и всё выражение истинно, независимо от значения правого операнда)
Основное отличие в ленивости оператора ||. Если левый операнд равен true второй операнд НЕ вычисляется.
В то время как для оператора | всегда вычисляются оба операнда.
В предоставленном коде это приводит к тому, что в первом случае number увеличивается три раза, два раза внутри условия if, и один раз в теле, а во втором - два раза, один раз внутри условия и один раз в теле.