长整除:这个程序会打印什么?final long MICROS_PER_DAY = 24*60*60*1000*1000;
final long MILLIS_PER_DAY = 24*60*60*1000;
System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);

解决方案 »

  1.   

    默认的整型直接量是int型,那么MICROS_PER_DAY赋值表达式的右面实际计算过程是一串int型数值的乘法运算,结果溢出了。如果把某个直接量后面加上L改为long型,那么结果就正确了。
      

  2.   

    final long MICROS_PER_DAY = 24*60*60*1000*1000;产生了溢出,因为使用数字时默认为 int 类型,只按 int 类的计算规则来进行计算,之后再赋给前面的 long 型数据,也就是说先计算,再赋值的,而其结果 86400000000 已经超出了 int 的最大值 2147483647,只要改成:  final long MICROS_PER_DAY = 24L*60*60*1000*1000;让其按 long 的规则去计算就可以。如果不加“L” MICROS_PER_DAY 的值相当于:(24*60*60*1000*1000L) & 0xFFFFFFFFL,也就是  500654080,除以 24*60*60*1000=86400000,得出的结果当然就是 5 了。