什么是数据溢出问题?
操作比较大的数的时候,要注意溢出问题。
溢出就是超过数据类型取值范围。
比如int类型,取值范围是最大2的31次方-1(其中最高位是符号位,用来表示正负,剩下的 31 位用于表示数值),也就是21亿左右
如果输出比如200亿的值,就会溢出,出错。
代码示例如下:
public class Demo06 {
public static void main(String[] args) {
int money = 10_0000_0000;//这里_是什么?
//是JDK7之后的新特性,数字之间可以用下划线分割,方便看清比较大的数
int years = 20;
int total = money*years;
System.out.println(total);
}
}
输出的值应该为200亿,但是结果错误
如何解决数据溢出问题?
解决方法是什么?
money*years,默认都是int,它们计算之后,默认的值也是int,此时就已经数据溢出了
需要在计算的同时,就将数据类型变成更大范围的数据类型
也就是说,比如要把years直接转换一下,此时虽然不属于强制类型转换,但是也要加上()
示例代码如下:
public class Demo06 {
public static void main(String[] args) {
int money = 10_0000_0000;//这里_是什么?
//是JDK7之后的新特性,数字之间可以用下划线分割,方便看清比较大的数
int years = 20;
long total = money*((long)years);//注意事项是什么?
//注意,这里变量total前面的数据类型,需要为long,否则会报错,也就是两者要一致,不能瞎转
System.out.println(total);
}
}
运行后,输出200亿,问题解决
什么场景会用到这种解决办法?
当本身一个个元素的值很小,只需要用int去定义,但是经过一系列计算之后,数据增大到int要溢出时,就用这这种解决办法。