final int a =100;
byte b = a; //will compile successfully.
final long l =100;
byte c = l ; // giving type cast error
这背后的具体原因是什么?
答案 0 :(得分:0)
我不确定,为什么int可以进行字节自动转换...基本上(根据java关于自动转换基元的规则)它不应该。
使用原语进行自动投射的主要规则:“我们不会丢失信息”。因此可以仅扩展类型。因此,int将被转换为long(没有丢失的信息),而long不能自动转换为int(long可以包含比最大整数值更大的数字)。这个规则应该完全传递给byte ...但你发现int to byte auto cast是可能的......
答案 1 :(得分:0)
根据文件 -
如果变量的类型是byte,short或char,则可以使用缩小的原语转换,并且常量表达式的值可以在变量的类型中表示。 强>
在这里他们没有提到 long 所以它必须由开发人员明确地进行类型转换
参考 - https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html
答案 2 :(得分:0)
这真是尴尬的行为。顺便说一句,例如,如果将int变量值增加到1000,代码将给出相同的强制转换错误。这是一种不一致,因为似乎对于使用一个单词来存储它们的值的类型检查值限制,而像long
这样的“大”类型则不是。但是,隐含地使用这些演员是一个坏主意。