我明白长文字不适合 int 变量,只要我不强制转换它:
long y = 1000000L;
int x = y; // error - lossy conversion
我不明白的是为什么在 int 范围内使用 int 文字会产生相同的错误:
long y = 100;
int x = y; // error - lossy conversion
整数的默认字面量是“int”,那么为什么我不能进行这种操作呢? 我得到的唯一答案是因为在将变量声明为 long 时,Java 将值存储为 long 值,即使我没有附加“L”后缀,但我想要一个“官方”解释。
最佳答案
即使您在 y
中存储的值足够小以适合 int
变量,但稍后可以为该变量分配一个新值,并且稍后值可能不适合 int
。
由于这样的赋值可能发生在运行时,编译器无法确保赋值始终是值。
编译器无法静态分析您的所有代码来验证赋值是否始终有效。尽管在您的简单示例中它看起来像是一个简单的验证,但通常它并不简单。
关于java - 从 long 到 int 的有损转换虽然使用 int 范围内的 int 文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58709965/