这个bug查了好几天,呵呵...
这再次证明 凡是不能太想当然。
static void t6(){
long now = System.currentTimeMillis();
long m1 = now-1000*60*60*24*30*3; //这是错的
long m2 = now-1000L*60*60*24*30*3;

System.out.println("now:"+now);
System.out.println("m1:"+m1); 
System.out.println("m2:"+m2);
}

解决方案 »

  1.   

    对,而且 我傻乎乎的以为m1的整个右边会被当做long运算。
      

  2.   

    呵呵,int类型溢出,自动转换一下类型就行,这些类型,只要凭在计算中有一个大范围类型,结果就会自动转换为大类型
      

  3.   

    :-),基础很重要啊,我看了http://www.ticmy.com/?p=285才发现的
      

  4.   

    建议 Eclipse 装个 FindBug 插件,这种问题很容易就找出来了
      

  5.   

    long m1 = now-1000*60*60*24*30*3;
    这个不是系统会自动转换的吗
      

  6.   

    《java解惑》上写的明明白白...