Autoboxing:为什么短S1 = 100;编译好了,但是长F1 = 100;失败了吗?

时间:2013-11-17 00:34:31

标签: java autoboxing

我理解编译Long F1 = 100;会失败,因为100是一个整数,因此编译器会将其设为Integer,并且无法扩展包装类型。

但为什么编译Short S1 = 100;会成功?非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

来自SCJP:

的第3章
  

以下是合法的,

     

byte b = 27;

     

但仅仅是因为编译器会自动缩小文字值   到一个字节。换句话说,编译器放入强制转换。该   前面的代码与以下内容相同:

     

byte b = (byte) 27; // Explicitly cast the int literal to a byte

     

看起来好像编译器给你一个休息时间,让你拿一个   分配给小于int的整数变量的快捷方式。   (我们所说的关于字节的所有内容同样适用于char和short,   两者都小于int)

在您的情况下,编译器正在使用:

Short s = (short)100;

答案 1 :(得分:0)

如果你将后缀l / L加到要编译的文字中 像波纹管龙F1 = 100l;要么             长F1 = 100L;