java - 从 long 到 int 的有损转换虽然使用 int 范围内的 int 文字

标签 java casting

我明白长文字不适合 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/

相关文章:

package - 我在哪里可以下载原始 java 包并添加到我的项目中?

java - 跟踪 Activity 通话状态 - Twilio

java - 为什么当我强制转换时我无法访问子类属性?

sql - PostGIS 按 ST_Distance 排序 - 不按距离排序记录

c++ - static_cast 到数字和指针内容之间的区别

c++ - 自动转换 redux

java - 为什么反序列化时不使用用户定义的serialVersionUID?

java - 将数据格式化为 JSON

java - ListView 中的视频 View

c - 用于 qsort 的指针转换