Почему появляется предупреждение "Числовое переполнение в выражении"
Использование 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 раза из 10, я получу предупреждение.
Ответы
Ответ 1
Я только что попробовал это на своей машине. Такая же версия intellij, но немного новая java 1.8.0_66. Если я скопирую ваш код и предполагаю, что он длиннее, я не получаю предупреждение. Если я удалю "L", я получу предупреждение (очевидно). Если я верну "L", предупреждение не исчезнет. Если я закрою и снова открою IntelliJ, предупреждение исчезнет.
Добавлен к трекеру вопросов: IDEA-151378