2015-07-10 92 views
4

众所周知的事实:(byte)1^(byte)1导致int(根据规范)。java中的类型转换规则

有人可以向我解释为什么以下可能没有明确演员(从intbyte)? byte myByte = (byte)1^(byte)1

以下,在另一方面,是不允许的:

int i = 0; byte b = i;

回答

9

此:

(byte)1^(byte)1 

是一个常量表达式(JLS 15.28),这是众所周知的是在范围为byte。可以隐式地因此将其转换为byte在分配上下文(JLS 5.2):

此外,如果表达式为byte类型,shortchar的恒定表达(§15.28),或int

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

如果不是一个常量表达式(例如,如果这些值中的一个是一个变量而不是),则分配会失败。

+0

我明白了。了解。谢谢 –