如何修复在Java中添加整数的错误?

如何修复在Java中添加整数的错误?,java,Java,在给定示例中: int a, b, c; a = 2111000333; b = 1000222333; c = a + b; System.out.println("c= " + c); 将返回:c=-1183744630,为什么 如何解决这个问题 您的整数溢出。整数的最大值为integer.MAX\u value(2^31-1)。如果值变大,变量将不再具有正确的值 长的射程更大 long a, b, c; a = 2111000333; b = 1000222333; c = a + b;

在给定示例中:

int a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);
将返回:
c=-1183744630
,为什么


如何解决这个问题

您的整数溢出。整数的最大值为
integer.MAX\u value
(2^31-1)。如果值变大,变量将不再具有正确的值

长的射程更大

long a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);

Java中int的最大值为2147483647。 如果要计算此值上的某个值,必须使用long类型。

int数据类型是一个32位带符号2的补码整数。它的最小值为-2147483648,最大值为2147483647


Java long的最大值是9223372036854775807,因此Scharrels的解决方案适用于您的示例

如果你需要的话,这里有另一个解决方案可以更高

BigInteger a = new BigInteger(2111000333);
BigInteger b = new BigInteger(1000222333);
BigIntegerc = a.add(b);
System.out.println("c= " + c);

这种方法仅受JVM内存的限制。

@Scharrels-如果它需要保持为整数,该怎么办?如果它需要保持为int,则可以将长值转换为整数,
int newInt=(int)c。虽然,我不完全确定这是否是一个好的方法。你不能把这么大的值放在一个整数中,所以你被卡住了。如果您需要使用大值执行部分计算,而大值之后会变小,请将整数转换为长整数,然后执行计算并将其转换回。但是,请注意,当您将Integer.MAX_值反算时,该值必须小于Integer.MAX_值。@reg:请记住,在Java中,整数类型总是有符号的,除非使用较大的类型,否则无法检测溢出。这是出于设计,是的,在某些情况下确实很不幸。但我如何预测变量会变得多大呢?我们是否应该默认将“可疑”变量(例如帐户余额)声明为长变量?在选择重
biginger
对象之前,我会检查
if(b>long.MAX\u VALUE-a)
long a, b, c;
a = 2111000333;
b = 1000222333;
if (b > LONG.MAX_VALUE - a) {
   // a and b cannot be added.
}