整数参数公式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
.
下面的代码将 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
.