往一个方法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虚拟机是怎么去理解、读取和运行的?
我们通过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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。