我有这样的代码
short a = 1;
short b = 2 ;
short c = a + b; // dosen't compile
编译失败的原因是什么?x
+x
总是产生Integer
或更大 Number
,但为什么呢?
我有这样的代码
short a = 1;
short b = 2 ;
short c = a + b; // dosen't compile
编译失败的原因是什么?x
+x
总是产生Integer
或更大 Number
,但为什么呢?
二元运算符都不会产生Integer
. 但是,它将使用一个int
而不是较短的类型,byte
并且short
如果char
编译器可以内联该值,它可以为您转换该值。例如
final short a = 1;
final short b = 2;
short c = a + b; // does compile, because of constant inlining.
唯一产生 an 的运算符Integer
是强制转换。
Integer i = (Integer) 1;
顺便说一句:奇怪的是,Java 将 32 位定义float
为比 64 位long
值“更宽”。这样做的缺点是浮点数的精度要低得多。考虑一下。
long l = 7777777777777777777L;
l += 0.0f;
System.out.println(l);
印刷
7777777579364188160
即使添加了 0.0F,l
它也被隐式转换为float
(因为 float 更宽),然后再转换回(因为使用了运算符分配),导致大约 200 亿的错误。