如果在执行表达式之前,赋值和数学运算中的每个操作数都提升为int
(如果它没有L, f, d
个标志);
将int
放入较小的基本类型(例如byte
)应该使用narrow-casting
;
那么以下作业如何运作?
byte a = 100;
如果100是一个整数,那么将它放入一个字节需要转换。
答案 0 :(得分:2)
byte a = 100;
这是有效的,因为java中的字节范围来自-128 to 127
,因此如果您将值指定为最多127,则无需进行强制转换。
尝试分配128
,您将收到编译错误。
byte a = 128 ; //compiler error(incompatible type)
byte a = (byte)128;
答案 1 :(得分:2)
byte a = 100;
这是因为......
如果assignment context中的右侧是常量表达式,
如果变量的类型是
byte
,short
或char
,则可以使用缩小的基元转换,并且常量表达式的值可以在类型中表示。变量
其中
原始类型的文字[...]
[...]从
-128
到127
,包括在内。
答案 2 :(得分:1)
这是一个编译时常量,编译器可以确定它是否适合一个字节。这实际上确实需要在旧版Java中进行缩小转换。