论坛首页 Java企业应用论坛

一个隐形的java int溢出

浏览 30238 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-08-30  
值得注意1
0 请登录后投票
   发表时间:2011-08-30  
俺也遇到过这个889032704
只是这个问题没有对俺的应用造成影响。
0 请登录后投票
   发表时间:2011-08-30  
学习了。看来还得注意这种问题。
0 请登录后投票
   发表时间:2011-08-30  
引用
任意一个常量上加L,转long型就OK了,坑爹哇~~~这回真是阴沟里翻船了~~


这个说法是不正确的。。。
   
    
        long msgInvalidDue = 60 * 24 * 3600 * 1000;       
        System.out.println(msgInvalidDue);
        
        msgInvalidDue = 60 * 24 * 3600 * 1000L;
        System.out.println(msgInvalidDue);
        
        msgInvalidDue = 60 * 24 * 3600 * 1000 * 24L; // <-- 在乘以最后一个24L之前,已经溢出了
        System.out.println(msgInvalidDue);
        
        msgInvalidDue = 60L * 24 * 3600 * 1000 * 24; // <-- 保险点还是放在最前面。。
        System.out.println(msgInvalidDue);


输出
引用
889032704
5184000000
21336784896
124416000000
0 请登录后投票
   发表时间:2011-08-30  
最可靠高效的办法是用计算器把最终值算出来,直接填上,绝不会出错
0 请登录后投票
   发表时间:2011-08-30  
嗯, 养成好的coding习惯还是很有必要的。
0 请登录后投票
   发表时间:2011-08-30  
哈哈,java解惑这本书上就重点强调了这个问题。哥们没看到,吃亏了
0 请登录后投票
   发表时间:2011-08-30  
ai,为什么为要转换成秒来计算呢,为什么不直接用天来计算,cpu太高????
0 请登录后投票
   发表时间:2011-08-30  
看来还是要多注意一下细节啊,我以前溢出的时候,老是忘掉是这个错,各种找原因。
0 请登录后投票
   发表时间:2011-08-30  
曾经我在做上传的时候也遇到过类似的问题,在限制文件上传的大小时就因为没有加上L,所以导致溢出,变成了负数,还好eclipse的智能,能及时查阅计算出来的结果,发现溢出就立即+L就没问题了.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics