不要默认类型转换

看下面一段层序:

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是在先进行运算,然后进行类型转换的,必须保证运算时不越界。

posted on 2013-04-14 20:59  ywf—java  阅读(141)  评论(0编辑  收藏  举报

导航