看下面一段层序:
public class TransTest {
private final static int SPEED_LIGHT=30*10000*1000;
public static void main(String[] args){
long dis1=SPEED_LIGHT*8*60;
System.out.println(dis1);
}
}
输出结果是:
-2028888064
竟然是负值,分析原因是dis1的乘子都是int类型,已经越界了,解决办法很简答,利用151个建议的方法,用主动声明式类型转换。
修改如下:
public class TransTest {
private final static int SPEED_LIGHT=30*10000*1000;
public static void main(String[] args){
long dis1=1L*SPEED_LIGHT*8*60;
System.out.println(dis1);
}
}
仅仅添加了一个1L,这里L大写是遵循了151个的一个建议,避免l和1无法辨认。
输出结果:
144000000000
结论:在进行计算时,特别是左右两边类型不一致时,要仔细分析输出的类型,有时候即使强制类型转换也不行,因为JAVA是在先进行运算,然后进行类型转换的,必须保证运算时不越界。