java - Por qué se produce la advertencia "Desbordamiento numérico en la expresión"
intellij-idea intellij-15 (1)
Acabo de probar esto en mi máquina. La misma versión de intellij, pero un java ligeramente más nuevo 1.8.0_66. Si copio, pego su código y asumo que más bajo es un largo, no recibo la advertencia. Si quito la "L" recibo la advertencia (obviamente). Si devuelvo la "L" la advertencia no desaparece. Si cierro y vuelvo a abrir IntelliJ, la advertencia desaparece.
Añadido al rastreador de problemas: IDEA-151378
Utilizando intellij 15.0.3 + Java 8u65 ...
lower = System.currentTimeMillis();
long upper = lower + 31536000000L; //add a year-ish
Funciona bien. Pero si lo hago:
lower = System.currentTimeMillis();
long upper = lower + (1000L*60*60*24*365);
Intellij ahora da una advertencia "Desbordamiento numérico en la expresión". Comprendería si esto fuera realmente cierto, y fue una advertencia constante sobre ambas expresiones, pero no lo es.
¿Alguien sabe por qué la segunda expresión genera la advertencia? Prefiero tener el desglose de esta manera que un número porque es más fácil para otros desarrolladores en el proyecto entender lo que está haciendo (aunque supongo que podría comentarlo). El código aún se compila, obviamente, pero encuentro advertencias en mis versiones como una picazón que no puedo rascar.
EDITAR Gracias por las respuestas ... Creo que esto es solo un problema de almacenamiento en caché en Intellij ... Si sé copiar / pegar lo anterior, no recibo la advertencia. Si intento editarlo después de pegar 1 o 2 veces de cada 10, aparece la advertencia.