论坛首页 Java企业应用论坛

一个隐形的java int溢出

浏览 30240 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-08-30  
这个确实很隐晦啊
0 请登录后投票
   发表时间:2011-08-30  
float x=0.0F  long x = 111L;一般都需要这样规范的
哪怕线程休眠一秒的时候也习惯这么写Thread.sleep(1000L);
0 请登录后投票
   发表时间:2011-08-30  
一般需要各种时间的转换我会这样写TimeUnit.DAYS.toMillis(60)
0 请登录后投票
   发表时间:2011-08-30   最后修改:2011-08-30
没养成好习惯吧,我一般用long型常量都会习惯明确加上L后缀

60 * 24 * 3600 * 1000都是int型的,结果超出Long.MaxValue自然就溢出了
0 请登录后投票
   发表时间:2011-08-30  
Crusader 写道
没养成好习惯吧,我一般用long型常量都会习惯明确加上L后缀

60 * 24 * 3600 * 1000都是int型的,结果超出Long.MaxValue自然就溢出了


是超出了Integer.MaxValue吧,呵呵。
0 请登录后投票
   发表时间:2011-08-30  
guoapeng 写道
这个bug经典,effective java 里面有讲到这一点,
Java的隐式转换确实问题很多。
1/4+3/4 =? 的问题虽然很基础,但是很重要。
类似的问题,算术计算方面的,谁来总结一下。

这个习惯好..小弟学着
0 请登录后投票
   发表时间:2011-08-30  
不容易发现的手误。
0 请登录后投票
   发表时间:2011-08-30  
这种“笔误”只有上线才能发现,这才是最可怕的。
0 请登录后投票
   发表时间:2011-08-30  
收藏 记下
0 请登录后投票
   发表时间:2011-08-30  
细节上的东西,真是不好查。学习了,以后用long 直接加suffix省的麻烦
0 请登录后投票
论坛首页 Java企业应用版

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