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

Mar*_*szS 4 java jvm compiler-errors language-specifications

我有这样的代码

short a = 1;
short b = 2 ;
short c = a + b; // dosen't compile
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*rey 20

没有二元运算符会产生Integer.但是,它会使用int,而不是更短的类型byte,shortchar 如果编译器可以内联的价值它可以为你投的价值.例如

final short a = 1;
final short b = 2;
short c = a + b; // does compile, because of constant inlining.
Run Code Online (Sandbox Code Playgroud)

产生一个的唯一操作员Integer是演员.

Integer i = (Integer) 1;
Run Code Online (Sandbox Code Playgroud)

BTW:奇怪的是,Java将32位定义float为比64位long值"更宽" .这有一个缺点,浮动精度要低得多.考虑一下.

long l = 7777777777777777777L;
l += 0.0f;
System.out.println(l);
Run Code Online (Sandbox Code Playgroud)

版画

7777777579364188160
Run Code Online (Sandbox Code Playgroud)

即使0.0F被添加到l它,它被隐式地转换为float(因为float更宽)然后回转(使用运算符赋值)导致大约200亿的错误.

  • +1:今天学到的东西:) (3认同)