В чем разница “&&” между “&” и “||” между “|” java?

125
09 сентября 2019, 10:10

Читал книгу философия ява. дошёл к пункту: какя разница между одинарним и двойним использованием сивволов

boolean i,a;
if(a||i){}
if(a|i){}
if(a&&i){}
if(a&i){}

Кроме того что & это должно бить двое true, а с | нужно только одно true.

Answer 1

Вообще, & и | - побитовые операторы, а && и || - логические.

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

К примеру, если бы там были не просто переменные, а метод, скажем:

private boolean additionalCheck() {
    // делаем что-то
    // к примеру, меняем глобальное состояние
    return true;
}

То между if(a||additionalCheck()){} и if(a|additionalCheck()){} будет разница, если a равно true.

В первом случае additionalCheck() вообще не вызовется, т.к. a уже true и нет смысла проверять другие условия. А вот втором случае additionalCheck() вызовется независимо от значения a.

Если у вас в additionalCheck() специфичная логика, к примеру, меняющая глобальное состояние, то нужно с умом выбирать, что использовать - |/& или ||/&&.

READ ALSO
Динамическая, редактируемая таблица в JavaFX

Динамическая, редактируемая таблица в JavaFX

У меня есть форма с таблицей, в каждой строке есть чекбоксПри переходе в следующую форму в нее передаются записи из таблицы с выбранным чекбоксом

131
Вакансия для Java junior или стажировка [закрыт]

Вакансия для Java junior или стажировка [закрыт]

Вопрос может немного не для этого сообщества, но все же

139
Оптимизация кода с replace()

Оптимизация кода с replace()

Есть небольшая програма по форматированию строки с использованием регулярного выраженияВ коде присутствует множесвенное использование...

95
ArrayList, LinkedList и переключение с одного на другой

ArrayList, LinkedList и переключение с одного на другой

Прочитал в книге: На стадии планирования в программы вы можете выбрать список LinkedList, а потом, в процессе оптимизации, переключиться на ArrayListБлагодаря...

149