2016-02-08 48 views
15

使用的是IntelliJ 15.0.3 +的Java 8u65 ...爲什麼 「數字溢出表達」 警告時

lower = System.currentTimeMillis(); 
long upper = lower + 31536000000L; //add a year-ish 

工作正常。但如果我這樣做:

lower = System.currentTimeMillis(); 
long upper = lower + (1000L*60*60*24*365); 

Intellij現在發出警告「表達式中的數值溢出」。我會理解這是否真的如此,並且它始終對兩個表達式都提出警告,但事實並非如此。

任何人都知道爲什麼第二個表達式會生成警告?我寧願將這種方式比數字分解,因爲項目中的其他開發人員更容易理解它在做什麼(儘管我想我可以評論)。代碼仍然編譯顯然,但我發現我的構建像我的癢,我不能劃傷的警告。

編輯 感謝答覆... 我認爲這僅僅是一個的IntelliJ緩存的問題...如果我知道複製/上面我沒有得到警告,粘貼。如果我在粘貼1或2次後嘗試編輯它,我會彈出警告。

+0

是否報警消失,如果你明確地使每個數字很長,而不是僅僅是第一? – JonK

+0

@GordonM 1.它的[tag:java]不是[tag:javascript] 2.數字末尾的'L'表示它是[long](https://docs.oracle.com/javase/7 /docs/api/java/lang/Long.html) – Ferrybig

+0

@JonK no我曾嘗試過 - 但看到編輯,我認爲這只是一個奇怪的緩存問題 –

回答

8

我剛在我的機器上試過這個。相同版本的intellij,但是稍微更新一些的java 1.8.0_66。如果我複製粘貼你的代碼並假設lower是很長的,我不會收到警告。如果我刪除「L」,我會得到警告(顯然)。如果我放回「L」,警告不會消失。如果我關閉並重新打開IntelliJ,警告消失。

添加問題跟蹤:IDEA-151378

+0

Intellij 2016.2.5 + JVM 1.8.0_112仍在發生 – Florent