long b=30*24*60*60*1000;b的结果值为-1702967296 而不是预期的2592000000,这是为什么?

解决方案 »

  1.   

    int型相乘返回int
    结果溢出后再转为long
      

  2.   

    楼上的正解
    30*24*60*60*1000;这是按照int数相乘,结果超出了int表示的范围,发生了上溢出,所以结果变成了负数,然后再将结果存放到long型变量中
    改正的方式:long b=30*24*60*60*1000L;
      

  3.   

    不是应该这样的吗?
    long b=(long)30*24*60*60*1000;
    是这样转的吧
      

  4.   

    楼上用法涉及到强制类型转换符号()与乘号*的优先级。
    还是用long b=30L*24*60*60*1000;sun中就有这个个代码(BigInteger类中的
    3L*5*7*11*13*17*19*23*29*31*37*41