Главная » Java » Тип выражения Java

0

Каждое выражение относится к тому или иному типу. Тип выражения определяется типами его составляющих и семантикой соответствующих операторов.

Если арифметический или побитовый оператор применяется к целочисленным аргументам, его результатом будет значение типа int (если же оба операнда относятся к типу long, результат также будет представлен как long). Исключение из этого правила относится к операторам побитового сдвига – тип правого операнда, задающего число сдвигов, не оказывает влияния на тип возвращаемого значения. Все целочисленные операции выполняются с точностью, соответствующей типам int либо long, поэтому аргументы более "мелких" целых типов, byte и short, перед выполнением операции всегда неявно преобразуются к типу int.

Если любой из операндов арифметического выражения относится к числовому типу с плавающей запятой, операция будет выполнена согласно правилам арифметики с плавающей запятой. Подобные выражения вычисляются в режиме float, если в составе выражения нет аргументов типа doublе – в последнем случае все остальные операнды будут преобразованы в double и результатом также окажется значение double.

Оператор + (плюс) выполняет функцию сцепления (конкатенации) строк, если любой из его операндов либо переменная в левой части соответствующего оператора присваивания (= или +=) относится к типу String.

Значение char в контексте выражения преобразуется к типу int; при этом старшие 16 битов значения int обнуляются. Например, символ Unicode с кодом \ufff трактуется как число int, равное 0x0000ffff. Аналогичное значение типа short, 0xffff, преобразуется в int совершенно иначе: старшие разряды итогового числа int заполняются содержимым знакового разряда в исходном short, поэтому в результате будет получено 0xffffffff.

Java относится к числу строго типизированных Языков программирования, поэтому компилятор выполняет все действия по проверке совместимости типов, какие только возможны в конкретной Ситуации. Любые подозрительные операции, предполагающие косвенное преобразование типов при присваивании значений, тут же отвергаются. Язык предлагает Возможность использования оператора явного преобразования типов (type casting), если факт совместимости типов может быть проверен только на этапе выполнения программы либо Возникает необходимость такого преобразования, которое в общем случае связано с потерей значащих разрядов чисел (как, например, при присваивании значения double переменной типа float). О проблемах совместимости типов и преобразования ссылочных типов мы упоминали в разделе 3.4 на странице 100. Здесь же мы обратим ваше внимание на вопросы совместимости и преобразования простых типов, рассматривая в качестве примера выражения присваивания, хотя те же правила применимы в процессе преобразования значений внутри отдельных выражений и передачи аргументов при вызове методов.

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

По теме:

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