• 基础不稳引起的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,这种问题往往是想不到的,因为自己有意识的忽略它们,觉得问题不应该会出现在这段代码,总之一定要重视基础,不要好高骛远。

  • 相关阅读:
    Java中的异常处理
    Java源码阅读Vector
    Java源码中遇到的一些问题(更新中)
    Java迭代器原理
    有趣的位运算-与或非
    有趣的位运算-移位运算
    为何要使用原码, 反码和补码?
    有趣的位运算-异或
    为什么实现Serializbale接口就能够进行序列化?
    死锁,活锁,饥饿
  • 原文地址:https://www.cnblogs.com/tjqBlog/p/9403936.html
Copyright © 2020-2023  润新知