Учу 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; // нет ошибки
с операциями инкрементации и декрементации анологичная ситуация.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Задача следующая: делается асинхронный вызов, в результате которого получаются некоторые данныеС момента отправки запроса до момента получения...
Есть форма регистрации и входаТребуется, чтобы если пользователь регистриурует аккаунт с таким же email, ником или паролем, ему выдавало сообщение...
Всем привет, Перед установкой Android SDK поставила JDKПроблема возникает при установке SDK, а именно: