为什么我们不能直接在字节变量中存储最终的长变量

时间:2016-03-19 05:39:57

标签: java casting primitive

    final int a =100;
    byte b = a;  //will compile successfully.

    final long l =100;
    byte c = l ; // giving type cast error 

这背后的具体原因是什么?

3 个答案:

答案 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这样的“大”类型则不是。但是,隐含地使用这些演员是一个坏主意。