java Integer溢出判断的两种方法

java中int是32位有符号整数类型,对应的包装类型提供了常量Integer.MAX_VALUE代表其最大值,Integer.MIN_VALUE代表其最小值,即int表示的整数范围在-2147483648 ~ 2147483647之间,超过这个范围会发生溢出,且不会抛任何异常。
在实际编码过程中,怎样判断int或者Integer是否溢出呢?
一、jdk8中提供的java.lang.Math已经帮我们实现了:

import java.lang.Math;
public class ArithmeticSolution{
	public static void main(String[] args){
		int x = Integer.MAX_VALUE;
        int xResult;
        try {
        	System.out.println("x="+x);
            xResult = Math.addExact(x, x);
            System.out.println("x+x = " + xResult);
        } catch (ArithmeticException aex){
            System.out.println("x + x 溢出," + aex.getMessage());
        }
        //判断int 减法 是否溢出
        x = Integer.MIN_VALUE;
        try{
        	System.out.println("x="+x);
            xResult = Math.subtractExact(x,1);
            System.out.println("x-x = " + xResult);
        }catch (ArithmeticException aex){
            System.out.println("x - 1 溢出," + aex.getMessage());
        }
        //判断int 乘法 是否溢出
        x = Integer.MAX_VALUE;
        try{
        	System.out.println("x="+x);
            xResult = Math.multiplyExact(x,x);
            System.out.println("x*x = " + xResult);
        }catch (ArithmeticException aex){
            System.out.println("x * x 溢出," + aex.getMessage());
        }
	}
}

打印结果:
在这里插入图片描述
查看Math.addExact(x, x)源码:
在这里插入图片描述
可以看出,Math中对于溢出的处理办法是直接跑出异常,我们在调用处捕捉异常即可。

二、自行编码判断

import java.lang.Math;
public class ArithmeticSolution{
	public static void main(String[] args){
        int x = Integer.MAX_VALUE;
        if(x > Integer.MAX_VALUE-x || x<Integer.MIN_VALUE-x){
        	System.out.println("x = " + x);
            System.out.println("x + x溢出");
        }
        //判断int 减法 是否溢出
        x = Integer.MIN_VALUE;
        if(x > Integer.MAX_VALUE + 1 || x<Integer.MIN_VALUE + 1){
        	System.out.println("x = " + x);
            System.out.println("x - 1溢出");
        }
        //判断int 乘法 是否溢出
        x = Integer.MAX_VALUE;
        if(x > Integer.MAX_VALUE / x || x<Integer.MIN_VALUE / x){
        	System.out.println("x = " + x);
            System.out.println("x * x溢出");
        }
	}
}

打印结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值