基础不稳引起的bug

  

1     public static void main(String[] args) {
2         Integer limitDay  = 1;
3         long dayMillisecond =  1*24*60*60*1000*24*100;
4         System.out.println(dayMillisecond);//输出 1201569792
5         long  longSecond= limitDay.longValue()*24*60*60*1000*24*100;
6         System.out.println(longSecond);// 输出 207360000000
7 
8     }

  由上面的输出结果,初看好像毁三观,但细细想还是能寻到缘由的。需要确认的是 上述代码第三行中的 dayMillisecond 虽然是用long来接收的,但其值却是不会超过int的取值范围的,因为等号右边都是int 与int之间的计算,最终的结果也是int,而第五行是int 与long之间的计算,最终的结果当然是long了。那么为什么结果相差100倍呢?大家都知道int 的存值返回约为 -21亿到21亿,由上面的计算字面量可知 大概是2000多亿,int在多次数据的溢出得到的结果正好是1201569792,这也就解释上面的输出结果。

  有时候我们写程序时,特别是线上程序往往bug就是由于一个小点引起的,上面的问题也曾引得我花大量的时间的改bug,这种问题往往是想不到的,因为自己有意识的忽略它们,觉得问题不应该会出现在这段代码,总之一定要重视基础,不要好高骛远。

猜你喜欢

转载自www.cnblogs.com/tjqBlog/p/9403936.html