Юлия Шмелева
июнь 2015.
416

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

Ответить
Ответить
Комментировать
0
Подписаться
0
1 ответ
Поделиться

Не знаю насколько актуален вопрос, но отвечу.

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

&& и || - как бы укорочённая версия этих операторов.

Основное различие между между этими видами покажу на сравнении переменных:

(a & b) - будет проверено и a, и b

(a | b) - будет проверено и а, и b

(a && b) - если а=false, то b проверено не будет

(a || b) - если а=true, то b проверено не будет

Рекомендуется использовать двойной вариант, так как это позволяет избежать ошибки при сравнении с null.

Одинарный оператор = используется для присваивания. Когда какой-то переменной или объекту необходимо задать значение.

Двойной оператор == используется для сравнения простых переменных. Для объектов лучше использовать метод equals().

2

Также (как понятно из названия) & и | можно использовать для побитовых операций.

int a;
a = 0x0F | 0xFF; // a теперь cодержит 0xFF, то есть число 255
a = 0x0F & 0xFF; // a теперь cодержит 0x0F, то есть число 15

С помощью && и || такие операции выполнять нельзя (будет ошибка компиляции). Побитовые операции используются, когда есть желание в одной переменной сохранить сразу несколько значений (это может быть полезно, например, для ускорения работы программы). Классический пример: цвет, который хранится в одной целочисленной переменной.

int red = 0xFF0000;           // красный цвет
int green = 0x00FF00;       // зелёный цвет
int yellow = red & green; // смешиваем красный и зелёный,
                                              // получаем жёлтый (0xFFFF00)

+1
Ответить

Вывод: новичку следует почти всегда использовать && или ||, потому что именно это ему, как правило, нужно. Битовые операции новичкам обычно не нужны.

+1
Ответить

Обнаружил у себя баг :-)

int yellow = red & green; // здесь ошибка
                                              // мы получили чёрный (0x000000)

Правильно будет:
int yellow = red | green; // смешиваем красный и зелёный,
                                           // получаем жёлтый (0xFFFF00)

+1
Ответить
Ещё 1 комментарий

спасибо за дополнение, все правильно)

0
Ответить
Прокомментировать
Ответить