光的速度是30万公里每秒,这里计算下地球,太阳,月球之间的距离
public class Client{ //光速是30万公里/秒,产量 public static final int LIGHT_SPEED = 30 * 10000 *1000; long dis1 = LIGHT_SPEED*1; System.out.println("月亮和地球的距离是:"+dis1); long dis2 = LIGHT_SPEED*60*8; System.out.println("太阳的距离是:"+dis2); } |
这种程序怎么看应该也不会错,但是看下运行结果:
月亮和地球的距离是:300000000
太阳的距离是:-2028888064
为什么会发生这种情况呢,dis2不是已经考虑到了int类型越界的问题,而且也使用了long型
为什么还会出现负值?
那是应为java是先运算在进行类型转换的,应为disc2的三个运算参数都是int类型,三者相乘的结果虽然是int类型,但是却超过了int的最大值,所以值就是负值了,在转换成long型,结果还是负值
既然知道问题了,解决起来也很简单,只要加一个L就行了,如下
long dis2 = LIGHT_SPEED*60L*8;或者
long dis2 = 1L*LIGHT_SPEED*60L*8;
这两种都是根据java的基本转换规则,向着数据范围大的方向转换