首页 > 解决方案 > 在 int 范围内使用 int 字面量从 long 到 int 的有损转换

问题描述

我确实理解长文字不适合 int 变量,只要我不强制转换它:

long y = 1000000L;
int x = y;  // error - lossy conversion

我不明白为什么在 int 范围内使用 int 文字会产生相同的错误:

long y = 100;
int x = y;  // error - lossy conversion

整数的默认文字是“int”,那么为什么我不能进行这种操作呢?我唯一的答案是,在声明一个变量 as long 时,Java 将值存储为一个 long 值,即使我没有附加“L”后缀,但我想要一个“官方”解释。

标签: javacasting

解决方案


即使您存储y的值足够小以适合int变量,也可以稍后将新值分配给该变量,并且以后的值可能不适合int.

由于这样的赋值可能发生在运行时,编译器无法确保赋值始终是值。

编译器无法静态分析您的所有代码以验证分配是否始终有效。尽管在您的简单示例中看起来很容易验证,但总的来说它并不简单。


推荐阅读