以下代码为我提供了-1894967296
,但这不是预期的。究竟发生了什么?我无法弄清楚。根据我的计算器,结果必须是2400000000 :(
import java.util.List;
import java.util.ArrayList;
public class Calculate{
public static void main(String []args){
int result = 1;
List<Integer> integer = new ArrayList<Integer>();
integer.add(100);
integer.add(200);
integer.add(300);
integer.add(400);
for (Integer value : integer) {
result *= value;
}
System.out.println(result);
}
}
当我调试时,它可以正常工作直到第三次迭代。
更新
根据答案,已经超出了int原语类型范围,但int变量会发生什么?它会违约吗?
答案 0 :(得分:3)
Java可以存储在int
中的最大数字是2 ^ 31 - 2147483648
2400000000大于那个“环绕”。
您需要使用64位数据类型,例如long
。
答案 1 :(得分:1)
2400000000太大而无法存储在int中。使用long
更合适,其最小值为-2 ^ 63,最大值为2 ^ 63 - 1,您的数字在此范围内。
答案 2 :(得分:0)
预期结果2400000000 > Integer.MAX_VALUE
。因此,使用long
代替int
来存储结果。
答案 3 :(得分:0)
使用BigInteger
代替int
,因为int
有限
Java doc:
int :默认情况下,int数据类型是32位带符号的二进制补码整数,其整数为&gt;最小值-231,最大值231-1。在Java SE 8及更高版本中,您可以使用int数据类型来表示无符号的32位整数,其最小值为0,最大值为232-1。使用Integer类将int数据类型用作无符号整数。有关更多信息,请参阅数字类一节。已经将诸如compareUnsigned,divideUnsigned等静态方法添加到Integer类中,以支持无符号整数的算术运算。
答案 4 :(得分:0)
大多数程序员都称之为Pillage。你不应该在一个小变量中保存一个long值,不要指望Int保存一个值2 ^ 31 +。
对于你想要做的事情,有一个long