java - 为什么 Java 中的加号运算符总是产生 Integer?

标签 java compiler-errors jvm language-specifications

<分区>

我有这样的代码

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

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

最佳答案

二元运算符都不会产生Integer。但是,它将使用 int 而不是较短的类型,byteshortchar 如果编译器可以内联它能为你的值(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?

java - 谷歌 VR Java 和 C++?

java - 调用 Spring 编写的 Rest URL

php - undefined variable 和mysqli错误

c# - 找不到类型或 namespace 名称 'register'

java - Java中是否可以保证非final字段的安全发布?

java - 需要创建 Java JAR 文件并将其添加到 Maven Dependency

java - Java 中的合法注释内容导致错误