Попробовав простую программу (используя 0 и 100, чтобы показать разницу между «специальными» константами и общими), компилятор Sun Java 6 выведет один и тот же байт-код для 1 и 2 (случаи 3 и 4 идентичны до 2, что касается компилятора).
Так, например:
double x = 100;
double y = 100.0;
компилируется в:
0: ldc2_w #2; //double 100.0d
3: dstore_1
4: ldc2_w #2; //double 100.0d
7: dstore_3
Однако я не вижу ничего в спецификации языка Java , гарантирующей это расширение константных выражений во время компиляции. Время компиляции сужается для таких случаев, как:
byte b = 100;
, как указано в разделе 5.2 , но это не совсем то же самое.
Может быть, кто-то с более острыми глазами, чем я, может найти где-нибудь гарантию ...