首页 > 编程语言 > 详细

java类型默认转换

时间:2016-01-09 12:28:53      阅读:153      评论:0      收藏:0      [点我收藏+]

光的速度是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的基本转换规则,向着数据范围大的方向转换

 

java类型默认转换

原文:http://www.cnblogs.com/evall/p/5115700.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!