Day6-Java什么时候会发生数据溢出问题?如何解决?

Day6-Java什么时候会发生数据溢出问题?如何解决?

什么是数据溢出问题?

操作比较大的数的时候,要注意溢出问题。

溢出就是超过数据类型取值范围。

比如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要溢出时,就用这这种解决办法。

相关推荐

手表电池寿命揭秘:延长使用时间的技巧与更换注意事项
建筑固废的种类和特点
365体育比分

建筑固废的种类和特点

07-01 706
王者荣耀 铭文优先级,王者荣耀铭文购买优先级,全方位解析与实战指南