Java双重初始化
这些说法有什么不同Java双重初始化,java,double,declaration,Java,Double,Declaration,这些说法有什么不同 双虚拟=0 双假人=0.0 双假人=0.0d 双假人=0.0D 最后3个应该是相同的。右边的文字已经是双精度的了。当您使用十进制文字时,“d”或“d”是隐式的 第一个稍有不同,因为0是一个int文本,它将被加宽为一个double。我不知道在这种情况下是否会产生不同的字节码;无论如何,结果应该是相同的。尝试了一个简单的程序(使用0和100来显示“特殊”常量和常规常量之间的差异),Sun Java 6编译器将为1和2输出相同的字节码(就编译器而言,情况3和4与2相同) 例如: d
最后3个应该是相同的。右边的文字已经是双精度的了。当您使用十进制文字时,“d”或“d”是隐式的
第一个稍有不同,因为0是一个int文本,它将被加宽为一个double。我不知道在这种情况下是否会产生不同的字节码;无论如何,结果应该是相同的。尝试了一个简单的程序(使用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;
如中所述,但这并不完全相同
也许有一个比我眼睛更锐利的人可以在某处找到保证…第一个:
double dummy = 0;
整数文本0
通过扩大原语转换被转换为double,请参见Java语言规范中的。请注意,这完全是由编译器完成的,它对生成的字节码没有任何影响
其他方面:
double dummy = 0.0;
double dummy = 0.0d;
double dummy = 0.0D;
这三种方法完全相同-
0.0
,0.0d
和0.0d
只是编写双
文本的三种不同方法。请参见JLS中的内容。感谢您的回复,我知道结果是相同的,我想知道发动机罩下的差异。对于“0.0”、“0.0d”和“0.0d”,发动机罩下实际上没有差异。这是三种编写双文本的方法,它们都是完全等效的。你能推荐一种好的资源,让人们可以阅读ldc2_w和其他指令的含义吗?