打字猴:1.700440212e+09
1700440212
1700440213 }
1700440214
1700440215 估计你要鄙视了,这种小学生乘法计算有什么可做的。不错,确实就是一个乘法运算,我们运行一下看看结果:
1700440216
1700440217 题目1:月亮光照射到地球需要1秒,计算月亮和地球的距离。
1700440218
1700440219 月亮与地球的距离是:300000000米
1700440220
1700440221 ––––––––––––––—
1700440222
1700440223 题目2:太阳光照射到地球上需要8分钟,计算太阳到地球的距离。
1700440224
1700440225 太阳与地球的距离是:-2028888064米
1700440226
1700440227 太阳和地球的距离竟然是负的,诡异。dis2不是已经考虑到int类型可能越界的问题,并使用了long型吗,为什么还会出现负值呢?
1700440228
1700440229 那是因为Java是先运算然后再进行类型转换的,具体地说就是因为disc2的三个运算参数都是int类型,三者相乘的结果虽然也是int类型,但是已经超过了int的最大值,所以其值就是负值了(为什么是负值?因为过界了就会从头开始),再转换成long型,结果还是负值。
1700440230
1700440231 问题知道了,解决起来也很简单,只要加个小小的“L”即可,代码如下:
1700440232
1700440233 long dis2=LIGHT_SPEED*60L*8;
1700440234
1700440235 60L是一个长整型,乘出来的结果也是一个长整型(此乃Java的基本转换规则,向数据范围大的方向转换,也就是加宽类型),在还没有超过int类型的范围时就已经转换为long型了,彻底解决了越界问题。在实际开发中,更通用的做法是主动声明式类型转化(注意不是强制类型转换),代码如下:
1700440236
1700440237 long dis2=1L*LIGHT_SPEED*60*8;
1700440238
1700440239 既然期望的结果是long型,那就让第一个参与运算的参数也是long型(1L)吧,也就是明说“嗨,我已经是长整型了,你们都跟着我一起转为长整型吧”。
1700440240
1700440241 注意 基本类型转换时,使用主动声明方式减少不必要的Bug。
1700440242
1700440243
1700440244
1700440245
1700440246 编写高质量代码:改善Java程序的151个建议 [:1700438092]
1700440247 编写高质量代码:改善Java程序的151个建议 建议24:边界,边界,还是边界
1700440248
1700440249 某商家生产的电子产品非常畅销,需要提前30天预订才能抢到手,同时它还规定了一个会员可拥有的最多产品数量,目的是防止囤积压货肆意加价。会员的预定过程是这样的:先登录官方网站,选择产品型号,然后设置需要预订的数量,提交,符合规则即提示下单成功,不符合规则提示下单失败。后台的处理逻辑模拟如下:
1700440250
1700440251 public class Client{
1700440252
1700440253 //一个会员拥有产品的最多数量
1700440254
1700440255 public final static int LIMIT=2000;
1700440256
1700440257 public static void main(String[]args){
1700440258
1700440259 //会员当前拥有的产品数量
1700440260
1700440261 int cur=1000;
[ 上一页 ]  [ :1.700440212e+09 ]  [ 下一页 ]