java中的类型转换规则

时间:2015-07-10 14:02:11

标签: java type-conversion

众所周知的事实:(byte)1 ^ (byte)1会产生int(根据规范)。

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

另一方面,不允许以下内容:

int i = 0; byte b = i;

1 个答案:

答案 0 :(得分:8)

此:

(byte)1 ^ (byte)1

是一个常量表达式(JLS 15.28),已知它在byte范围内。因此,您可以在分配上下文(JLS 5.2)中隐式将其转换为byte

  

此外,如果表达式是类型为byteshortcharint的常量表达式(第15.28节):

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

如果不是常量表达式(例如,如果其中一个值是变量),则赋值将失败。