开发者社区> 问答> 正文

[@炯轩][¥20]java虚拟机如何理解类类型?

往一个方法2里传参,设byte x=5。

传入x至方法2,而方法2接收类型是double类型的x,方法2内输出x发现值为5.0

由此可得,数据可以正常传入方法2,我理解为方法2在接收x前在堆中new了一个空间,空间命名为x,提示虚拟机以double格式解读空间x中的数据,紧接着byte类型的5就放进来了,double类型规则读取识别到的值是5.0。

如果以上理解成立,那么

问:

类类型的数据,java虚拟机是怎么去理解、读取和运行的?

展开
收起
月下丶 2018-12-14 23:16:57 1902 0
1 条回答
写回答
取消 提交回答
  • 刘子瑛,阿里系统框架专家。工作十余年,一直对新编程语言、新开发方法、数学与算法相关和并发等相关领域保持浓厚的兴趣。乐于通过技术分享促进新技术。

    我们通过Java虚拟机指令来分析一下就容易理解了。
    源代码:

        byte b1 = 5;
        double d1 = b1;

    翻译成Java虚拟机指令为:

           0: iconst_5
           1: istore_1
           2: iload_1
           3: i2d
           4: dstore_2

    Java是有两套数学相关指令集的,一类是处理整数的,以i开头;一类是处理浮点数的,以d开头。
    iconst_5,意思是生成一个整数值5的值。
    istore_1将其存入栈中。
    iload_1再将这个5读出来。
    然后,经过i2d指令完成类型转换。
    再通过dstore_2指令保存进栈。

    Java是强类型语言,隐含转换类型是不可以的,需要用类型转换指令。

    对于类对象,在Java中当做引用类型来处理。有一套a开头的处理引用类型的指令集。

          19: astore        4
          21: aload         4
    2019-07-17 23:21:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载