Java 基础知识(整型数据类型)

int 数据类型溢出问题

public class Test{
    public static void main(String args[]){
        int maxValue = Integer.MAX_VALUE; //获取最大值
        int minValue = Integer.MIN_VALUE; //获取最小值
        int maxTest = maxValue+1;//测试最大值加1
        int minTest = minValue-1;//测试最小值减1
        int maxTest2 = maxValue+2;//测试最大值加2
        System.out.println(maxTest);
        System.out.println(minTest);
        System.out.println(maxTest2);
    }
}
输出的结果是

-2147483648
2147483647
-2147483647

由此可见,当int数据类型溢出时最大值加1会变成最小值,最小值减1会变成最大值。具体原因通过汇编很好理解。

解决方法

将int类型转化为long类型

如果直接执行以下语句会输出什么?

long result = maxValue+1;
System.out.println(result);

结果是:-2147483648,虽然我们已经将result转化为long类型,但是java语言是先执行“=”后的内容,也就是先执行 ”maxValue+1“。此时maxValue仍属于int类型,则还是会出现溢出。

正确的实现方式是
long result = (long)maxValue+1;
System.out.println(result);
先将int类型变量转化为long型,或者将int类型变量先赋值给long型,再进行加减运算。
java中范围小的数据类型可以自动转化为范围大的数据类型,但是范围大的数据类型只有通过强制转化才能变成范围小的数据类型!
ps:java浮点型的数据运算存在个历史bug,以下的代码会输出的结果是什么?
System.out.println(1.1*1.1);

正常理解是会输出1.21,但是编译运行以后得到的结果是:1.2100000000000002

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值