一尘不染

Java双重初始化

java

这些陈述有何不同?

  1. 双虚拟= 0;
  2. 双虚拟= 0.0;
  3. 双虚拟= 0.0d;
  4. 双虚拟= 0.0D;

阅读 254

收藏
2020-12-03

共1个答案

一尘不染

尝试过一个简单的程序(使用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节所述,但这不是完全一样的。

也许有比我更眼神敏锐的人可以在某处找到保证…

2020-12-03