2017-01-26 64 views
1
//date is a java.util date 
//date.getTime() = 1485462073669 
int days = 3600; 
long time = date.getTime() + (days * 24 * 60 * 60 * 1000L); 

這將導致時間= 344094777669. 如果我施放可變天數,結果將會不同。爲什麼此Java表達式不會將最終值轉換爲long類型?

date.getTime() + ((long) days * 24 * 60 * 60 * 1000L) 

這將導致時間= 4639062073669

爲什麼天需要轉換類型長的時間表達正確評價?

+0

http://stackoverflow.com/questions/1494862/multiplying-long-values –

+0

我更好奇爲什麼發生這種情況。第二個表達是正確的,但我想知道爲什麼我需要強制演員。根據第一個鏈接,所有的數學都是用最大的數據類型完成的,所以不應該把所有的變量都推得很長?尤其是因爲最後一個數字被定義爲長類型。 –

+0

如果日期是同一個對象,我看不到這個代碼如何給出不同的結果。將一個int投射到很長時間不會改變任何內容。你確定日期在兩種情況下都是同一個實例嗎? A – davidxxx

回答

2

Java是從左到右。

days * 24 * 60 * 60 * 1000L 
int * int * int * int * long 
    int  * int * int * long 
      int  * int * long 
        int * long 
         long 

你也可以做到以下幾點:

1000L * days * 24 * 60 * 60 
long * int * int * int * int 
    long  * int * int * int 
      long  * int * int 
        long * int 
          long 

但是......在你的情況應該不會改變任何事情。我運行你的代碼,兩種方法都返回相同的結果。也許date.getTime()返回另一個值?

+0

但'3600 * 24 * 60 * 60'不會溢出'int'。 – Kayaman

+1

是的,但是這個等式的前半部分看起來不像311,040,000 * 1000L? 311,040,000不會溢出int。然後乘以一長會適合長期。 –

+0

而且每次都沒有date.getTime()。我通過Intellij評估表達式。 –

相關問題