[問題] Java Puzzlers Quiz 3
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
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章
14
39