Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

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

#java #типы #конвертация


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

int i = 10;
i = i / 2.5;


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

int i = 10;
i /= 2.5;

    


Ответы

Ответ 1



Так работает оператор присваивания, если переменная типа int, а i / 2.5 типа double, то вы не можете присвоить значение типа double к типу int без явного каста. То есть проверка типов осуществляется перед присваиванием переменной значения. Во втором случае утверждение является выражением, в котором значение преобразовывается к типу операнда, то есть чтобы можно было осуществить операцию и обратно к типу переменной, где должно хранится значение. То есть int i = 10; d = i /= 2.5; тоже будет работать, поскольку нначения int преобразовавыются к double перед присваиванием без потери точности, обратное не верно и вызывает ошибку.

Ответ 2



операция типа i /= 2.5; это операция с автоматическим приведением типов, будет записана как i = (int) i/2.5; тоже самое с double d = 1d; int i = 1; i = i * d; // ошибка i *= d; // нет ошибки с операциями инкрементации и декрементации анологичная ситуация.

Комментариев нет:

Отправить комментарий