溢出问题和类型转换问题

本文介绍了Java中整数运算可能导致的溢出问题,指出即使使用long类型接收,如果运算过程未进行类型转换,依然会发生溢出。示例展示了正确的类型转换方法以避免溢出。同时,解释了数字运算默认类型为int,只有当运算数中有更高优先级类型时才会提升运算结果的类型。
摘要由CSDN通过智能技术生成

溢出问题和类型转换问题

int a=10_0000_0000;//jdk1.7版本后可以用下划线来隔开数字,不影响数值
int b=20;
int c=a*b;
System.out.print(c);
运行结果:-1474836480

原因是:int的取值范围是-21_4748_3648到±21_4748_3648。 当a*b时,会造成溢出。

解决办法

int a=10_0000_0000;//jdk1.7版本后可以用下划线来隔开数字,不影响数值
int b=20;
long c=a*(long)b;
System.out.print(c);
运行结果:20000000000

在计算之前就进行类型转换,默认的计算之后的结果也是long,就不会溢出,再用long来接收。

但是其中有一个误区就是:

很多初学者以为用一个long来接收就不会溢出,但是在两个int类型计算时,结果默认就是int类型,此时就已经溢出,再用long来接收也还是溢出的。

int a=10_0000_0000;//jdk1.7版本后可以用下划线来隔开数字,不影响数值
int b=20;
long c=a*b;
System.out.print(c);
运行结果:-1474836480

小知识:
数字运算默认的类型是int,除非运算的数中有比int类型优先级高的,就会转换成高优先级的,但是运算的数中的优先级都比int低的话,会默认是int。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值