Главная » Java » Операторы присваивания Java

0

Оператор присваивания, =, сохраняет значение выражения правой части в левостороннем операнде, который представляет собой идентификатор переменной или элемента массива. Тип выражения обязан быть совместим с типом переменной в левой части оператора – с учетом возможности явного преобразования. Для ссылочных типов совместимость присваивания означает, что выражение должно относиться к тому же типу, что и переменная, либо к производному типу. Что касается простых типов, все числовые типы взаимно совместимы (с некоторыми ограничениями), а переменным типа boolean могут быть присвоены только значения типа boolean.

Операция присваивания является выражением, которое возвращает присваиваемое значение. Например, оператор присваивания

z = 3;

Возвращает значение 3. Это значение может быть присвоено другой переменной, и такая операция также возвратит результат 3, и т.д. Поэтому, если необходимо сохранить в нескольких переменных одно и то же значение, выражения присваивания допускается записывать в виде цепочки:

х = у = z = 3;

состоит в использовании выражения присваивания в заголовке цикла. Приведем соответствующий пример:

while ((v = stream.next()) != null)

 processValue(v);

Значение считывается (next) из потока данных (stream) и сохраняется в переменной v. Если значение не равно null, оно обрабатывается, и далее выполняется очередной шаг цикла. Обратите внимание, что оператор присваивания, (=) обладает более низким приоритетом, нежели оператор != (подробная информация приведена в разделе 6.10 на странице 193), поэтому выражение присваивания заключено в скобки.

Оператор в виде знака равенства (=) – это простейшая форма операторов присваивания. Существует также множество других форм. Любой бинарный арифметический, логический или побитовый оператор, совмещенный с оператор =, образует соответствующий составной оператор присваивания. Например,

arr[where()] += 12;

равнозначно выражению

arr[where()] = arr[where()] + 12;

за тем исключением, что в первом случае выражение в левой части оператора присваивания вычисляется только один раз.

Если даны переменная var типа Т, значение ехрг и бинарный оператор ор,

выражение

var op = expr;

равносильно выражению

 

var = (T)((var) ор (ехрг))

 

За исключением того, что в первом случае обращение к пере мен ной var выполняется только единожды. Оператор ор= верен только в том случае, если оператор ор сам по себе применим к значению заданного типа. Например, недопустимо использовать оператор <<= с аргументом типа double, поскольку то же запрещено и оператором <<.

Обратите внимание на скобки в последней строке кода – они применены неспроста. Выражения

а *= b + 1;

а = а * (b + 1);

Пример, равнозначны, чего не скажешь о выражении а = а *b + 1;

Хотя а += 1 – то же самое, что и ++а, оператор ++ относится к базовым и потому более предпочтителен.

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии