<分区>
我有这样的代码
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
如果编译器可以内联它能为你的值(value)投下值(value)。例如
final short a = 1;
final short b = 2;
short c = a + b; // does compile, because of constant inlining.
产生 Integer
的唯一运算符是强制转换。
Integer i = (Integer) 1;
顺便说一句:奇怪的是,Java 将 32 位 float
定义为比 64 位 long
值“更宽”。这有一个缺点,即 float 的精度要低得多。考虑一下。
long l = 7777777777777777777L;
l += 0.0f;
System.out.println(l);
打印
7777777579364188160
即使将 0.0F 添加到 l
,它也被隐式转换为 float
(因为 float 更宽)然后转换回来(因为使用了运算符赋值)误差约为 200 亿。
关于java - 为什么 Java 中的加号运算符总是产生 Integer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21186232/
相关文章:
java - 在 toString 方法中尝试 Catch block
java - 为什么java ClassLoader中没有unloadClass(String name)方法
java - Gradle:如何使一组 Java 文件面向 Android 和 Oracle JVM?
php - undefined variable 和mysqli错误
c# - 找不到类型或 namespace 名称 'register'
java - Java中是否可以保证非final字段的安全发布?