添加两个整数时,Java中出现意外输出



我是java语言的新手,这里我不理解,为什么程序在添加两个全范围整数后返回-2。

class Variables {
public static void main(String[] args) {
int a = 2147483647;
int b = 2147483647;
long c = a + b;
System.out.println( c );
}
}

我正在表达式变量c中的4294967294值,但为什么它返回-2请给我解释一下这个背后的原因

您到达Integer.MAX_VALUE,因此您将转到-2147483648,然后再次添加Integer.MAX_VALUE将导致-2

要获得4294967294,您需要先将一个值强制转换为long,然后再进行long求和,而不是将int转换为

int a = 2147483647;
System.out.println(a + 1); //-2147483648
int b = 2147483647;
System.out.println(a + b); // -2
long c = a + (long) b; // or ((long) a) + b;
System.out.println(c); //4294967294

添加两个int的结果是一个int,当您添加ab时,它当然会溢出。只有这样,它才会升级为long

在执行加法之前,您可以通过将其中一个转换为long来获得预期结果:

long c = ((long) a) + b;

最新更新