即使您在y
中存储的值足够小以适合int
变量,也可以稍后将新值分配给该变量,而稍后的值可能不适合int
。
由于这种分配可能在运行时发生,因此编译器无法确保分配始终为值。
编译器无法静态分析您的所有代码以验证分配将始终有效。尽管在您的简单示例中看起来很容易验证,但总的来说这并不简单。
,
您的问题一开始看起来很简单,但是经过一番研究,我发现了一个我以前从未听说过的概念-隐式类型转换
正如您所说,用于int和long的内存大小是不同的:
int-32位有符号整数
长-64位带符号整数
并且将长值分配给int的问题是由于大小差异。
编译器将不会对您的long值执行数字运算,以检查其是否适合32位有符号整数。
例如数字1在内存中的表示方式有所不同:
int 1是“ 00000000 00000000 00000000 00000001”(32位)。
long 1是“ 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001”(64位)。
因此我们无法对不兼容的数据类型执行隐式类型转换。将long int转换为int会导致丢弃多余的高阶位。
反之亦然!
它称为隐式类型转换或类型提升,因此,您可以将int分配给long变量。
java基本类型深入
https://www.ntu.edu.sg/home/ehchua/programming/java/J2_Basics.html
关于类型提升
http://www.java2s.com/Tutorials/Java/Data_Types/What_is_Java_type_promotion.htm
本文链接:https://www.f2er.com/3160212.html