Неявное приведение типов в Java

195
01 января 2019, 21:00

Учу Java, читаю Шилдта. Уже много раз прочитал, что Java — сильно типизированный язык. Почему следующий код выкидывает ошибку

int i = 10;
i = i / 2.5;

А такой код прекрасно работает и присваивает к i значение 4?

int i = 10;
i /= 2.5;
Answer 1

Так работает оператор присваивания, если переменная типа int, а i / 2.5 типа double, то вы не можете присвоить значение типа double к типу int без явного каста.

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

int i = 10;
d = i /= 2.5;

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

Answer 2

операция типа

i /= 2.5;

это операция с автоматическим приведением типов, будет записана как

i = (int) i/2.5;

тоже самое с

double d = 1d;
int i = 1;
i = i * d; // ошибка
i *= d; // нет ошибки

с операциями инкрементации и декрементации анологичная ситуация.

READ ALSO
Как заменить позицию в ArrayList objects?

Как заменить позицию в ArrayList objects?

Есть ArrayList с кастомным классом:

169
Retrofit 2. Как узнать, что пришел ответ на запрос?

Retrofit 2. Как узнать, что пришел ответ на запрос?

Задача следующая: делается асинхронный вызов, в результате которого получаются некоторые данныеС момента отправки запроса до момента получения...

182
Как проверить наличие данных в таблице SQLite?

Как проверить наличие данных в таблице SQLite?

Есть форма регистрации и входаТребуется, чтобы если пользователь регистриурует аккаунт с таким же email, ником или паролем, ему выдавало сообщение...

181
Установка Android SDK (java.exe not found) при уже установленном JDK

Установка Android SDK (java.exe not found) при уже установленном JDK

Всем привет, Перед установкой Android SDK поставила JDKПроблема возникает при установке SDK, а именно:

188