狭窄的铸造int到较小的类型

时间:2015-05-09 17:48:53

标签: java casting

如果在执行表达式之前,赋值和数学运算中的每个操作数都提升为int(如果它没有L, f, d个标志);

int放入较小的基本类型(例如byte)应该使用narrow-casting;

那么以下作业如何运作?

byte a = 100;

如果100是一个整数,那么将它放入一个字节需要转换。

3 个答案:

答案 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中的右侧是常量表达式,

  

如果变量的类型是byteshortchar,则可以使用缩小的基元转换,并且常量表达式的值可以在类型中表示。变量

其中

  

原始类型的文字[...]

constant expression

range of a byte

  

[...]从-128127,包括在内。

答案 2 :(得分:1)

这是一个编译时常量,编译器可以确定它是否适合一个字节。这实际上确实需要在旧版Java中进行缩小转换。