低于最大值的总和的总和会返回负值?

时间:2014-04-08 11:36:56

标签: java long-integer

我有5个对象,abcde。 5个对象的哈希码如下:

a => 72444
b => 110327396
c => 107151
d => 2017793190
e => 68574749

如您所见,所有都是积极的价值观。 但是,当我将它们总结为long - 变量时,结果会显示为负数:

long sum = a+b+c+d+e;
System.out.println(sum);     // prints -2098092366

这些整数的总和远低于long(9223372036854775807)的最大值,但它会产生负面结果。为什么呢?

2 个答案:

答案 0 :(得分:4)

这是因为你的变量都是int,所以你要int加法(溢出),然后最终结果转换为long

您可以通过将第一个变量强制转换为long来解决此问题:

long sum = (long)a + b + c + d + e;

答案 1 :(得分:2)

整数值可以是-2,147,483,648到2,147,483,647。总和实际上超过了最大值并转移了numeric overflow

int x = 2147483647;
x++;
System.out.println(x);

打印 - -2147483648

相关问题