Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java双重初始化_Java_Double_Declaration - Fatal编程技术网

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

这些说法有什么不同

  • 双虚拟=0
  • 双假人=0.0
  • 双假人=0.0d
  • 双假人=0.0D
    最后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和其他指令的含义吗?