为什么会出现"表达式中的数字溢出"警告

Man*_*tel 18 java intellij-idea intellij-15

使用intellij 15.0.3 + Java 8u65 ...

lower = System.currentTimeMillis();
long upper = lower + 31536000000L; //add a year-ish
Run Code Online (Sandbox Code Playgroud)

工作良好.但如果我这样做:

lower = System.currentTimeMillis();
long upper = lower + (1000L*60*60*24*365); 
Run Code Online (Sandbox Code Playgroud)

Intellij现在发出警告"表达式中的数字溢出".我知道这实际上是否属实,并且一直警告两种表达方式,但事实并非如此.

任何人都知道为什么第二个表达式产生警告?我宁愿以这种方式进行分解而不是数字,因为项目中的其他开发人员更容易理解它正在做什么(尽管我想我可以发表评论).代码仍然编译明显,但我发现我的构建中的警告像一个我无法划伤的痒.

编辑 感谢您的回复......我认为这只是Intellij中的一个缓存问题...如果我知道复制/粘贴上面的内容我就不会收到警告.如果我在10次粘贴1或2次后尝试编辑它,我会弹出警告.

Ste*_*man 10

我刚在机器上试过这个.相同版本的intellij,但略高一点的java 1.8.0_66.如果我复制粘贴您的代码并假设较低的是很长的,我不会收到警告.如果我删除"L",我会收到警告(显然).如果我把"L"放回去,警告就不会消失.如果我关闭并重新打开IntelliJ,警告就会消失.

添加到问题跟踪器:IDEA-151378