Java 双初始化
2022-09-01 06:05:05
这些说法在哪些方面有所不同?
- 双假人 = 0;
- 双假人 = 0.0;
- 双假人 = 0.0d;
- 双假人 = 0.0D;
这些说法在哪些方面有所不同?
在尝试了一个简单的程序(同时使用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节所述,但这不是一回事。
也许比我眼神更敏锐的人可以在某个地方找到保证......
对于第一个:
double dummy = 0;
整数文本通过加宽基元转换转换为双精度值,请参阅 Java 语言规范中的 5.1.2 加宽基元转换。请注意,这完全由编译器完成,它对生成的字节码没有任何影响。0
对于其他的:
double dummy = 0.0;
double dummy = 0.0d;
double dummy = 0.0D;
这三种完全相同 - ,只是写字面的三种不同方式。请参见 3.10.2 JLS 中的浮点文字。0.0
0.0d
0.0D
double