大数相乘时注意溢出问题
先引入一个JDK新特性
int money2=1000000000;
int money=10_0000_0000;
int years=20;
System.out.println(money==money2);
JDK新特性,数字之间可以用下划线分割,便于人工读数。
一个简单的运算,计算工资
int total=money*years;
System.out.println("==================================");
System.out.println(total);//-1474836480,产生溢出
long total2;//尝试用long解决问题
total2=money2*years;//两个int类型相乘,结果仍然是int
System.out.println(total2);//-1474836480,产生溢出。
int类型相乘会得到一个int类型的结果,再把这个结果赋值给total2,所以尽管total2是一个long类型,但是在计算时结果就已经溢出了,所以并不能得到正确的运算结果。
正解
//正解
System.out.println("==================================");
long total3;
total3=(long)money*years;
System.out.println(total3);
必须要在计算时进行强制类型转换,把money的类型转换为long,在计算后会得到一个long型的数据赋值给long类型的total3从而得到正确结果。
资料来源:b站搜索:“遇见狂神说”