为什么将短变量赋值给Integer引用会产生编译时错误?

kau*_*ray 9 java boxing casting type-conversion

我在Java中有以下代码:

class Boxing
    {
        public static void main(String args[])
        {
            short s = 10;
            Integer iRef = s;
        }
    }
Run Code Online (Sandbox Code Playgroud)

为什么它在编译时会产生错误?如果我明确地将short缩写为表达式中的整数,则会成功编译.因为我在表达式中使用short不是默认情况下应该是整数的类型而不需要显式情况?

Thi*_*ilo 14

你想在这里发生两件事:加宽和自动装箱.

不幸的是,Java只会自动执行两者中的一个.其原因很可能是相当晚(在Java5中)引入了自动装箱,他们必须小心不要破坏现有代码.

你可以做

int is = s;    // widening

Short sRef = s;   // autoboxing

Integer iRef = (int) s;  // explicit widening, then autoboxing
Run Code Online (Sandbox Code Playgroud)