web-dev-qa-db-ja.com

「式の数値オーバーフロー」警告が発生する理由

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は、「式の数値オーバーフロー」という警告を表示するようになりました。これが実際に真実であるかどうかは理解できます。両方の表現に対して一貫して警告が出されていましたが、そうではありません。

2番目の式が警告を生成する理由を誰かが知っていますか?プロジェクトの他の開発者がそれが何をしているのかを理解しやすいので、私は数字よりもこの方法で内訳を知りたいです(コメントできると思いますが)。コードはまだ明らかにコンパイルされますが、ビルドにかゆみのような警告があり、スクラッチできません。

[〜#〜] edit [〜#〜]応答ありがとうございます...これはIntellijのキャッシュの問題だと思います...上記のコピー/貼り付けを知っていると、取得できません警告。貼り付け後に10回のうち1回または2回編集しようとすると、警告が表示されます。

19
Manish Patel

私は自分のマシンでこれを試しました。同じバージョンのintellijですが、少し新しいJava 1.8.0_66。コードをコピーして貼り付け、lowerが長いと仮定すると、警告は表示されません。「L」を削除すると「(明らかに)警告が表示されます。「L」を戻すと、警告は消えません。IntelliJを閉じてから再度開くと、警告は消えます。

課題トラッカーに追加: IDEA-151378

10
Steve Bosman