[声明]所有代码均来自Joshua Bloch和Neal Gafter所著的<Java解惑>一书,本人仅因学习需要摘抄和注释,感谢二位作者的知识分享.
代码:
public class LongDivision {
public static void main(String[] args) {
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);
}
}
结果:
5
分析:
对第一个长整形变量MICROS_PER_DAY进行赋值,24*60*60*1000*1000的值已经超过一个Int型变量表示的
范围,所以将会发生截断,然后对整形进行扩容来为长整形赋值.
对第二个长整形变量MILLIS_PER_DAY 进行赋值,24 * 60 * 60 * 1000的值依旧可以用一个Int型变量存储,
所以不会发生截断
解决方案代码:
public class LongDivision {
public static void main(String[] args) {
final long MICROS_PER_DAY = 24L * 60 * 60 * 1000 * 1000;
final long MILLIS_PER_DAY = 24L * 60 * 60 * 1000;
System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);
}
}
结果:
1000