整数参数公式返回整数

时间:2015-08-20 18:28:50

标签: java casting int long-integer primitive

下面的代码使foo值为-1149239296 i。即integer超出范围的值:

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

似乎Java获取了第一个参数的type,并尝试使用type返回公式结果。 在Java规范中哪个人可以阅读该故事?

我提出了这样的建议原因

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

实际上会将long值设置为foo

1 个答案:

答案 0 :(得分:0)

对于这种情况,将任何int文字投射到long都可以。但是对于较长的操作链,中间某处可能出现溢出,关联性很重要。根据{{​​3}},*运算符是左关联的,因此第一个文字应该是long,以避免从一开始就溢出int。其他与数学相关的运算符也是左关联的。

只有一个文字是long是必要的原因是因为二进制数字促销JLS Section 15.17,它会将较窄的类型提升为更宽的类型,至少int