如何比较一个整数和一个长?

时间:2014-03-24 18:40:05

标签: java

我正在尝试检查长整数是否大于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();
                }
            }

2 个答案:

答案 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;

换句话说,在添加之前检查金额是否会溢出,并抛出异常(或发送错误消息或适合您的应用程序的任何内容),而不是正常进行。