В чем разница операций?

Учу java и решаю незамысловаты задачки на разных сайтах. Так вот одна мне сломала голову, точнее даже две.

  1. Какое значение будет иметь переменная number после выполнения этого кода?
int number = 5;
if(++number > 5 | ++number > 6) 
    number++;

// Ответ 8**
  1. Какое значение будет иметь переменная number после выполнения этого кода?
int number = 5;
if(++number > 5 || ++number > 6) 
    number++; 

// Ответ 7**

Тут два оператора или || и |. В чем их разница?


Ответы (2 шт):

Автор решения: CrazyElf

| - побитовый оператор или, в этом случае производится операция "побитовое или" между операндами, чтобы её посчитать, нужно выполнить и левый операнд и правый

|| - логический оператор или, с логическими операторами среда исполнения использует оптимизации - если для вычисления истины или ложности достаточно выполнения левого операнда, то правый операнд не вычисляется, что и происходит в вашем случае (левый операнд истинен - значит и всё выражение истинно, независимо от значения правого операнда)

→ Ссылка
Автор решения: Grundy

Основное отличие в ленивости оператора ||. Если левый операнд равен true второй операнд НЕ вычисляется.

В то время как для оператора | всегда вычисляются оба операнда.

В предоставленном коде это приводит к тому, что в первом случае number увеличивается три раза, два раза внутри условия if, и один раз в теле, а во втором - два раза, один раз внутри условия и один раз в теле.

→ Ссылка