为什么Java中的运算符总是生成整数?

时间:2014-01-17 12:37:59

标签: java compiler-errors jvm language-specifications

我有这样的代码

short a = 1;
short b = 2 ;
short c = a + b; // dosen't compile

编译失败的原因是什么? x + x始终生成Integer更大 Number,但为什么?

1 个答案:

答案 0 :(得分:20)

所有二元运算符都不会产生Integer。但是,它将使用int而不是更短的类型byteshortchar如果编译器可以内联值,则可以为您的值转换值。 e.g。

final short a = 1;
final short b = 2;
short c = a + b; // does compile, because of constant inlining.

产生Integer的唯一操作符是强制转换。

Integer i = (Integer) 1;
BTW:奇怪的是,Java将32位float定义为比64位long值“更宽”。这有一个缺点,浮动精度要低得多。考虑一下。

long l = 7777777777777777777L;
l += 0.0f;
System.out.println(l);

打印

7777777579364188160

即使0.0F被添加到l,它也被隐式强制转换为float(因为float更宽)然后被强制转换(使用运算符赋值)导致错误~20十亿。