Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования JAVA.pdf
Скачиваний:
374
Добавлен:
02.05.2014
Размер:
2.57 Mб
Скачать

converted to PDF by BoJIoc

Выражения-результаты (второе и третье) должны иметь тип, совместимый с операцией присваивания. Каждое из них должно быть таким, чтобы оно присваивалось другому без явного приведения типа. Тип результата условного оператора совпадает с более общим из типов двух возможных результатов. Например, в операторе

double scale = (halveit ? 1 : 0.5);

результаты относятся к типам int (1) и float (0.5). Значение типа int может быть присвоено переменной double, поэтому условный оператор также имеет тип double. Это правило сохраняется и для ссылок если значение одного типа может присваиваться другому, то типом операции будет наиболее общий (наименее расширяемый) из них. Если ни один из этих типов не может быть присвоен другому, то операция является недопустимой.

Условный оператор иногда называют или оператором вопросительный знак/точкаиз-за формы его записи, или тернарным оператором”, поскольку это единственный тернарный (трех-операндный) оператор в языке Java.

5.20. Операторы присваивания

Простой знак = является основной формой оператора присваивания. Java поддерживает много других разновидностей присваивания. Любой арифметический или бинарный поразрядный оператор может быть объединен с = для образования оператора присваивания. Например:

arr[where()] += 12;

приводит к тому же результату, что и

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

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

Для заданной переменной var типа Type, значения expr и бинарного оператора op запись

var op= expr

эквивалентна следующей:

var = (Type)((var) op (expr))

за исключением того, что значение var вычисляется всего один раз. Это означает, что запись op= допустима лишь в том случае, если оператор op может быть использован для типов, участвующих в выражении. Так, вы не сможете применить <<= с переменными типа double, потому что оператор сдвига << не работает с double.

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

a *= b + 1

эквивалентно

a = a * (b + 1)

но не

a = a * b + 1

Хотя a += 1 — то же самое, что и ++a, запись с использованием ++ счи- тается более наглядной, и потому ей отдается предпочтение.