Учу Java, читаю Шилдта. Уже много раз прочитал, что Java — сильно типизированный язык. Почему следующий код выкидывает ошибку
int i = 10;
i = i / 2.5;
А такой код прекрасно работает и присваивает к i значение 4?
int i = 10;
i /= 2.5;
Так работает оператор присваивания, если переменная типа int, а i / 2.5 типа double, то вы не можете присвоить значение типа double к типу int без явного каста.
То есть проверка типов осуществляется перед присваиванием переменной значения. Во втором случае утверждение является выражением, в котором значение преобразовывается к типу операнда, то есть чтобы можно было осуществить операцию и обратно к типу переменной, где должно хранится значение. То есть
int i = 10;
d = i /= 2.5;
тоже будет работать, поскольку нначения int преобразовавыются к double перед присваиванием без потери точности, обратное не верно и вызывает ошибку.
операция типа
i /= 2.5;
это операция с автоматическим приведением типов, будет записана как
i = (int) i/2.5;
тоже самое с
double d = 1d;
int i = 1;
i = i * d; // ошибка
i *= d; // нет ошибки
с операциями инкрементации и декрементации анологичная ситуация.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей