Member 12959504 Ответов: 2

Нужен ли кастинг в одних случаях, но не в других?


Почему мне нужно кастинг в некоторых случаях в java, но не в других? Например, мне не нужно приводить выражение byte i = 4 * 5, но мне нужно привести выражение byte r = i * 5. Почему это так?

Что я уже пробовал:

Я написал программу на java, где и попробовал ее

2 Ответов

Рейтинг:
1

OriginalGriff

Поскольку компилятор "знает", что значение 4 * 5 поместится в байт, он может рассматривать его как байтовое значение. Когда вы пытаетесь умножить целое число на константу, результат будет целым числом - и преобразование в байт потенциально потеряет информацию (поскольку байт может содержать только 8 бит, а целое число обычно составляет 32 бита).
Чтобы избежать потери данных, он предупреждает Вас о необходимости явного приведения.


Рейтинг:
1

CPallini

Потому что в правой части

byte i = 4 * 5;
существует выражение constat, вычисляемое во время компиляции, и поэтому заранее известно, что оно помещается в байт.

С другой стороны, с правой стороны
byte r = i * 5.

существует переменная, поэтому она не может быть оценена во время компиляции, происходит автоматическое продвижение типа (см. Автоматическое повышение типа в выражениях[^]) и вам нужен гипс.