我正在尝试检查长整数是否大于INTEGER.MAX值,但它不起作用。它非常直接,所以我只是想知道将Integer对象与我所做的长对象进行比较是否有问题,因为否则我不知道问题是什么。在nextTotal值超过INTEGER.MAX时,它会输入负数而不是打印错误消息。
public Integer initialValue=0;
int amount = Integer.parseInt(amountStr);
System.out.println("Received from client: " + amount);
long nextTotal=amount+initialValue;
if((nextTotal>Integer.MAX_VALUE)|| (nextTotal<Integer.MIN_VALUE)){
System.out.println("Error: Integer has not been added as the total exceeds the Maximum Integer value!");
out.flush();
}
else{
initialValue+=amount;
out.println(initialValue); //server response
System.out.println("Sending total sum of integers to the client:"+initialValue);
out.flush();
}
}
答案 0 :(得分:2)
问题是您添加了两个int
,但它们还没有被提升为long
,所以它在转换为long
之前会溢出,并且当然,int
永远不会超过Integer.MAX_VALUE
。只有在分配后才会转换为long
。
在添加之前转换为long
,并使用强制转换。
long nextTotal = (long) amount + initialValue;
答案 1 :(得分:0)
由于您实际上不想使用long
值,我通常会像这样进行检查:
int amount = Integer.parseInt(amountStr);
if (amount > (Integer.MAX_VALUE - initialValue))
throw new IllegalArgumentException("Amount exceeds maximum value");
initialValue += amount;
换句话说,在添加之前检查金额是否会溢出,并抛出异常(或发送错误消息或适合您的应用程序的任何内容),而不是正常进行。