锁定老帖子 主题:一个隐形的java int溢出
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-30
值得注意1
|
|
返回顶楼 | |
发表时间:2011-08-30
俺也遇到过这个889032704
只是这个问题没有对俺的应用造成影响。 |
|
返回顶楼 | |
发表时间:2011-08-30
学习了。看来还得注意这种问题。
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2011-08-30
最可靠高效的办法是用计算器把最终值算出来,直接填上,绝不会出错
|
|
返回顶楼 | |
发表时间:2011-08-30
嗯, 养成好的coding习惯还是很有必要的。
|
|
返回顶楼 | |
发表时间:2011-08-30
哈哈,java解惑这本书上就重点强调了这个问题。哥们没看到,吃亏了
|
|
返回顶楼 | |
发表时间:2011-08-30
ai,为什么为要转换成秒来计算呢,为什么不直接用天来计算,cpu太高????
|
|
返回顶楼 | |
发表时间:2011-08-30
看来还是要多注意一下细节啊,我以前溢出的时候,老是忘掉是这个错,各种找原因。
|
|
返回顶楼 | |
发表时间:2011-08-30
曾经我在做上传的时候也遇到过类似的问题,在限制文件上传的大小时就因为没有加上L,所以导致溢出,变成了负数,还好eclipse的智能,能及时查阅计算出来的结果,发现溢出就立即+L就没问题了.
|
|
返回顶楼 | |