Java双初始化

Alb*_*gni 27 java double declaration

这些陈述在哪些方面有所不同?

  1. double dummy = 0;
  2. double dummy = 0.0;
  3. double dummy = 0.0d;
  4. double dummy = 0.0D;

Jon*_*eet 23

尝试了一个简单的程序(同时使用0和100,以显示"特殊"常量和常规常量之间的差异),Sun Java 6编译器将为1和2输出相同的字节码(情况3和4与2相同)就编译器而言).

例如:

double x = 100;
double y = 100.0;
Run Code Online (Sandbox Code Playgroud)

编译为:

0:  ldc2_w  #2; //double 100.0d
3:  dstore_1
4:  ldc2_w  #2; //double 100.0d
7:  dstore_3
Run Code Online (Sandbox Code Playgroud)

但是,我在Java语言规范中看不到任何保证这种常量表达式的编译时扩展的东西.对于以下情况,编译时缩小范围:

byte b = 100;
Run Code Online (Sandbox Code Playgroud)

第5.2节所述,但这并不完全相同.

也许眼睛比我更敏锐的人可以在某处找到保证......


Jes*_*per 14

对于第一个:

double dummy = 0;
Run Code Online (Sandbox Code Playgroud)

整数文字0转换为带有扩展基元转换的double,请参阅5.1.2扩展Java语言规范中的原始转换.请注意,这完全由编译器完成,它对生成的字节码没有任何影响.

对于其他人:

double dummy = 0.0;
double dummy = 0.0d;
double dummy = 0.0D;
Run Code Online (Sandbox Code Playgroud)

这三个是完全一样的- 0.0,0.0d并且0.0D只有三个不同的书写方式double文字.请参阅JLS中的3.10.2浮点文字.