Автоматическое продвижение типов в выражениях

Обновлено: 04.11.2024

Приведение типов в выражениях может происходить в тех случаях, если переменной одного типа нужно присвоить значения переменной другого типа. Подробно о примитивных типах Java описано здесь . Примеры использования переменных в приложениях на Java можно посмотреть здесь .

Приведение типов может быть явное и автоматическое (неявное).

При явном приведении типов сама операция приведения задается явным образом.

При автоматическом приведении типов нужно, чтобы выполнялись два условия:

  • оба типа должны быть совместимыми;
  • длина исходного типа (типа источника) должна быть меньше длины целевого типа (типа приемника).

2. Как выглядит явное приведение типов в выражениях? Примеры

Явное приведение типов позволяет осуществлять присвоение несовместимых типов. Общая форма явного приведения типов имеет вид:

Примеры явного приведения типов.

3. Примеры автоматического приведения типов

Пример 1. Автоматическое приведение целочисленных типов.

Пример 2. Автоматическое приведение типов с плавающей запятой.

Пример 3. Автоматическое приведение смешанных типов. Такой случай возможен, если переменной типа с плавающей запятой присваивается значение переменной целочисленного типа.

4. Как осуществляется автоматическое продвижение типов в выражениях?

Автоматическое продвижение типов происходит в выражениях. При этом, значение, которое фигурируют в выражениях, автоматически продвигаются к типам с большими диапазонами значений.

При автоматическом продвижении типов в выражениях:

  • если один из целочисленных операндов имеет тип int, то все значения типов byte, short и char продвигаются к типу int;
  • если один из целочисленных операндов имеет тип long, то все выражение продвигается к типу long;
  • если один из операндов относится к типу float, то тип всего выражения будет также типа float (если нет операндов типа double);
  • если один из операндов относится к типу double, то тип всего выражения будет также double.

5. Пример продвижения из типа byte в int в котором выражение не содержит операндов-переменных типа int (long)

Вышеприведенный пример работает корректно, так как:

  • результат помещается (совместим) в тип byte;
  • нет операндов типа int.

В вышеприведенном примере значения 1000 превышает диапазон значений типа byte. Сначала число 1000 приводится к типу int. Но результат

приводится к типу byte и может корректно поместиться в переменной b .

Если написать так:

В этом случае результат не помещается в тип byte:

Если сделать явное приведение типов:

то в этом случае результат 5000 типа int превращается в тип byte. Как известно, переменная типа int занимает 32 бита, а переменная типа byte занимает 8 бит. Значение переменной типа int урезается. И имеем то, что имеем ( b = -120 ).

Вышеприведенные примеры относятся и к переменным типов short и char.

6. Пример. Продвижение из типа byte в тип int, в котором выражение содержит операнд-переменную типа int

Это означает, что результат есть типа int (а не byte ) даже если значение помещается в диапазон значений типа byte. Поскольку в выражении используется переменная-операнд d типа int.

Если осуществить явное приведение типов, то результат будет корректным:

7. Пример. Продвижение из типа int в тип long

Пример продвижения типов из int в long. Если один из операндов есть типа long, то все выражение продвигается к типу long.

Как видно из примера, если один из операндов есть типа long , то все выражение становится типа long .

8. Пример. Продвижение к типу float

В данном примере показано, что если один из операндов имеет тип float, то все выражение продвигается к типу float (если отсутствует тип double).

Читайте также: