public static void main(String[] args) {
final long  a= 24*60*60*1000*1000;
final long b = 24*60*60*1000;

System.out.println(a/b);
}
当时面中兴的时候 就问觉得a应该是溢出的,得出的结果应该不是1000,我回来用电脑测试一下结果是5,黑诡异,有谁能说一下为什么吗?

解决方案 »

  1.   

    long 的范围是 2^64 次方,24*60*60*1000*1000 怎么会溢出呢.很明显是 后面没有加 L, 所以a 是 intfinal long  a= 24*60*60*1000*1000L;
    final long b = 24*60*60*1000L;
      

  2.   

    24*60*60*1000*1000是int型的,2147483647 < 86400000000,a溢出,类型提升为long时取低32位,也就是86400000000二进制1010000011101110101110110000000000000取低32为11101110101110110000000000000就是500654080,
    500654080/86400000=5.....