如果赋值和数学运算中的每个操作数在执行表达式之前被提升为int
(如果它没有L, f, d
标志);窄铸造int到更小的类型
并且将int
放入较小的原始类型(如byte
)应该用narrow-casting
完成;
那么下面的分配是如何工作的?
byte a = 100;
如果100是一个整数,所以把它放入一个字节需要铸造。
如果赋值和数学运算中的每个操作数在执行表达式之前被提升为int
(如果它没有L, f, d
标志);窄铸造int到更小的类型
并且将int
放入较小的原始类型(如byte
)应该用narrow-casting
完成;
那么下面的分配是如何工作的?
byte a = 100;
如果100是一个整数,所以把它放入一个字节需要铸造。
byte a = 100;
此操作,因为...
如果在assignment context右手侧是常量表达式,
甲基本收缩转换可以如果类型被使用的变量是
byte
,short
或char
,并且常量表达式的值可以用变量的类型表示。
凡
字面原始类型的[...]
[...]从
-128
到127
,包容性。
感谢您的文档链接 – mrdaliri
这是一个编译时常量,编译器可以确定它适合一个字节。实际上,这确实需要在旧版本的Java中进行缩小转换。
所以如果它是一个常量,编译器知道它是否合适,但如果它是一个表达式,它会在执行结果后强制执行? – mrdaliri
byte a = 100;
这工作,因为在Java字节范围为-128 to 127
,所以如果你高达127赋值,就没有必要对投。
试着指定128
,你会得到编译器错误。
byte a = 128 ; //compiler error(incompatible type)
byte a = (byte)128;
这是一个缩小的转换,而不是铸造;铸造不会改变目标值。 – chrylis