Автоматическое продвижение типов в выражениях
Обновлено: 21.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).
Читайте также: