java - 将 Integer.MAX_VALUE+1 参数传递给方法时防止溢出 (int var)

标签 java parameters overflow

如果我将 Integer.MAX_VALUE + 1 参数传递给 method(int var),如何防止 int 溢出?

示例:

public class Hello {

    void test(int var){
        System.out.println(var);
    }

    public static void main(String[] args) {        
        Hello hello = new Hello();
        hello.test(Integer.MAX_VALUE + 1);
    }
}

最佳答案

您无法“阻止”溢出。这是显而易见的,因为 int 数据类型有一个值范围。使用+运算符进行数字相加时,int + int的结果是int类型。

您想要做的可能是防止出现意外结果,在这种情况下您宁愿知道是否发生了溢出。为此,您可以使用:

try {
    Math.addExact(a, b);
} catch(ArithmeticException ex) {
    // If this exception is raised, then you know
    // that an overflow occured, and you can handle it
    // more appropriately.
}

这样,您就可以处理溢出的情况并且不使用意外的值。但还是发生了溢出。
当您对此方法完成测试时:

Math.addExact(Integer.MAX_VALUE, 1)

引发以下异常:

java.lang.ArithmeticException thrown: integer overflow
      at Math.addExact (Math.java:825)

您的另一个选择是使用long 来允许更大的值。为此,您需要将至少一个值转换为 long:

(long)Integer.MAX_VALUE + 1

这会产生long2147483648

关于java - 将 Integer.MAX_VALUE+1 参数传递给方法时防止溢出 (int var),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50685183/

相关文章:

java - 无法关闭 Windows 并打开其他窗口

c++ - 创建一个新对象并传入方法参数

css-float - 图像重叠 DOM 元素边框

html - 这个溢出 'trick'是怎么实现的呢?

java - sun-jaxws.xml 中的 JAX-WS 多端点

java - 如何在没有 hibernate.cfg.xml 文件的情况下创建 Hibernate session ?

java - 由于 setOpaque(false) 方法,JPanel 不断被重新绘制

javascript - 将服务器端变量传递给 asp.net 中的 javascript 函数

c++ - 如何使用函数返回的对象作为另一个函数的参数 C++

ios - Overflow-y 不适用于 iPad