作者PttHuge (我要看Naruto >_<)
看板java
标题[问题] Java Puzzlers Quiz 3
时间Mon Apr 10 02:42:18 2006
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);
}
}
这题主要是在解Long Division的问题
不过这边我想要了解的是,将MICROS_PER_DAY与MILLIS_PER_DAY印出来
答案都是正确的计算结果(分别为86400000000与86400000)
不过在做除法的时候,却是使用int 型态在做除法
因为MICROS_PER_DAY实际在对於int type已经造成overflow
结果在除法的过程中
MICROS_PER_DAY overflow後的运算结果为500654080
而相除之後的结果为5.7946076
所以会印出整数5
在这边主要的疑问为MICROS_PER_DAY与MILLIS_PER_DAY都已经宣告为long
为何在做整数除法,JVM 却是使用int ?
难道也是Java Language Spec的一部份吗? ?_?
这样的design rule又是否有什麽考量呢?
--
Java Puzzlers中文版,天珑打79折才411元喔 :p
--
嘿嘿..我是huge..
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.206.35