乍一看,這段代碼"正確無比"。Date date = new Date();
Date thirty = new Date();
thirty.setTime(date.getTime()-30*24*60*60*1000);
比如今天是2008-09-23

輸出:Tue Sep 23 14:24:27 CST 2008
可是

輸出:Mon Oct 13 07:27:14 CST 2008
很明顯,結果是錯誤的。原因在:30*24*60*60*1000。date.getTime()是long類型,30*24*60*60*1000是會隱式的轉換成long類型,可是在轉換之前,就已經溢出了!

輸出:-1702967296
已經溢出了,再轉換成long類型,也是負數了。
但是在乘之前就做類型轉換,就不會有問題。30 * 24 * 60 * 60 * 1000L
在24*24*60*60*1000的時候,還是不會溢出的,在25的時候就溢出了。