У меня этот код:странное поведение байта в Java
public class First
{
public static void main(String[] args)
{
byte b=50;
byte c=b*2; //Error
byte d=50*2; //d=100
byte e=(byte)258; //e=258%256;
byte f=(byte)128; //f=128%256;
}
}
- Я знаю, что любое арифметическое выражение, включающее
byte
сначала повышен доint
, а затем она выполняется. Поэтому я ожидалd=50*2
, чтобы сообщить об ошибке, потому что результат50*2
является значениемint
, и мы храним его вbyte
без какого-либо явного приведения типов. Если Java делает кастинг неявно, почемуc=b*2
сообщает об ошибке ? - Я знаю, что если я хочу, чтобы сохранить значение, которое не находится в пределах диапазона в
byte
переменной, то я должен явно ввести приведение его вbyte
и значение, которое будет сохранено это значение по модулю 256 (Размер байта). Поэтому почемуbyte f=(byte)128
return-128
? С128 % 256 = 128
, так что я ожидаюf=128
, но он возвращает-128
. Зачем?
Большое спасибо.
50 * 2 является постоянной во время компиляции. 128 находится вне диапазона байтов. –