低于 long 最大值的整数总和返回负数?

kry*_*tah 1 java long-integer

我有 5 个对象,a, b, cde。5 个对象的哈希码如下:

a => 72444
b => 110327396
c => 107151
d => 2017793190
e => 68574749
Run Code Online (Sandbox Code Playgroud)

如您所见,所有都是正值。但是,当我将它们总结为一个long-variable 时,结果为负:

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

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

Jes*_*per 5

发生这种情况是因为您的变量都是ints,所以您要int加法(溢出),然后将最终结果转换为long.

您可以通过将第一个变量强制转换为long

long sum = (long)a + b + c + d + e;
Run Code Online (Sandbox Code Playgroud)