整数参数公式returns整数

Integer parameters formula returns integer

下面的代码将 foo 值设为 -1149239296 i。 e. integer 超出范围的值:

int bar = 3000;
long foo = bar * 1024 * 1024;

似乎 Java 接受了第一个参数的 type 并尝试使用 type 得到 return 公式的结果。 Java 规范中的哪里可以读到那个故事?

我提出这样的建议是因为

int bar = 3000;
long foo = (long)bar * 1024 * 1024;

实际上 returns 将 long 值设置为 foo

对于这种情况,将任何 int 文字转换为 long 都可以。但是对于较长的运算符链,中间某处可能会发生溢出,关联性很重要。根据 JLS Section 15.17* 运算符是左关联的,因此第一个文字应该是 long 以避免从一开始就溢出 int。其他与数学相关的运算符也是左结合的。

之所以只需要一个文字long是因为二进制数字提升Section 5.6.2 of the JLS,这将提升更窄的类型更广泛的类型,至少 int.