java - 在 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”后缀,但我想要一个“官方”解释。
解决方案
即使您存储y
的值足够小以适合int
变量,也可以稍后将新值分配给该变量,并且以后的值可能不适合int
.
由于这样的赋值可能发生在运行时,编译器无法确保赋值始终是值。
编译器无法静态分析您的所有代码以验证分配是否始终有效。尽管在您的简单示例中看起来很容易验证,但总的来说它并不简单。
推荐阅读
- php - jquery中的对象使用json响应
- php - 回显时表单不设置变量 - php
- python - 选择/单击 QScrollArea 条目时会发出什么样的信号?
- python - 在 Python 3 中将文件作为 dict() 导入
- java - 无法在 android Facing NoClassDefFoundError 中生成 Release SHA1 密钥
- naming-conventions - 命名约定“by” vs “with” vs “using”
- php - 使用 PHP 在类中获取错误
- python - 在 Flask DB 类上使用 SQLalchemy distinct 函数
- amazon-web-services - 无法为“”重新启动应用服务器:名为“”的环境对于此操作处于无效状态。必须准备好
- php - 查询结果重叠