这些陈述有何不同?
尝试过一个简单的程序(使用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节所述,但这不是完全一样的。
也许有比我更眼神敏锐的人可以在某处找到保证…