Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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_Casting_Jvm_Double_Type Promotion - Fatal编程技术网

Java类型升级的源代码在哪里?如何调试

Java类型升级的源代码在哪里?如何调试,java,casting,jvm,double,type-promotion,Java,Casting,Jvm,Double,Type Promotion,我主要想调试以下类型提升代码,以了解为x创建的临时双变量。我该怎么做 public class TypePromotion { public static void main(String args[]){ int x = 10; double y = 20.0; double z = x + y; System.out.println("value of Z is :: "+z); // outputs 30.0 System.out.println(

我主要想调试以下类型提升代码,以了解为x创建的临时双变量。我该怎么做

public class TypePromotion {
public static void main(String args[]){
    int x = 10;
    double y = 20.0;
    double z = x + y;

    System.out.println("value of Z is :: "+z); // outputs 30.0
    System.out.println("value of X is :: "+x); // outputs 10
}}

据我所知,您的问题的答案在Java语言规范中

在这种情况下,对一对操作数x和y使用运算符+时,生成的数字类型由这些定义确定

更详细地说,如果您反汇编代码生成的类文件,相关说明如下:

   0: bipush        10
   2: istore_1
   3: ldc2_w        #2                  // double 20.0d
   6: dstore_2
   7: iload_1
   8: i2d
   9: dload_2
  10: dadd
  11: dstore        4

如您所见,x存储为int,y存储为double。x被推到堆栈上,然后转换为double。将y推送到堆栈上后,可以执行dadd双加运算,因为两个操作数都是双数。javac编译器生成符合Java语言规范的代码,如上所述。

如果您已经知道答案并且认为它太琐碎,请请求您投票否决:-另外请建议我应该在哪里发布它类型升级的源代码在哪里。。。你刚刚分享了它。这个问题充其量也只是胡说八道,恐怕我们不确定您的源代码或调试意味着什么。请告诉我们你到底想要什么。嗯,听着,你想调试,但是你要找的bug是什么?您需要源代码,但您已经提供了源代码,尽管格式不好。为x创建的临时双精度是在JRE内的运行时完成的。这是特定于平台的,有许多JRE实现。java将源文件TypePromotion.java编译成字节码,这与汇编程序JVM中关于什么指令做什么的部分类似,但不同。为了查看javac发出了什么字节码,应该使用javap。只要您已经阅读了javap的帮助消息,javap的使用就很简单了。简而言之,i2d+1Thanks lot@Speakjava的转换就是我一直在寻找的