我确实知道,只要我不强制转换,长文字就不适合int变量:
long y = 1000000L;
int x = y; // error - lossy conversion
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么在int范围内使用int文字会产生相同的错误:
long y = 100;
int x = y; // error - lossy conversion
Run Code Online (Sandbox Code Playgroud)
整数的默认文字是'int',那么为什么我不能执行这种操作?唯一的答案是因为Java在声明变量为long的同时,将值存储为long值,即使我没有附加“ L”后缀,但我也希望有一个“正式的”解释。
即使您存储y的值足够小以适合int变量,也可以稍后将新值分配给该变量,而稍后的值可能不适合int。
由于此类分配可能在运行时发生,因此编译器无法确保分配始终为值。
编译器无法静态分析您的所有代码以验证分配将始终有效。尽管在您的简单示例中看起来很容易验证,但总的来说这并不简单。