java中包装类型的自动装箱
2019-06-06 本文已影响0人
一只狗被牵着走
对汇编不是很了解,本文权作自我分析,也欢迎路过的亲批评指正`_`
昨天福至心灵一般,想到Integer的自动装箱、拆箱机制,上网找几篇相关帖子琢磨琢磨,看的过程中引发一个问题: Integer的自动装箱是怎样调用方法赋值的?调用了哪个方法?
demo 使用Idea的debug功能查看调用步骤:
![](https://img.haomeiwen.com/i15518672/c25ed568bfa8bea3.png)
发现下一步直接跳转到Integer的valueOf()方法:
![](https://img.haomeiwen.com/i15518672/532be670d69e58df.png)
Integer中的源码这里不说哈,单讲从语句 Integer a = 3;
跳转到Integer中的valueOf()方法,没有按照java语法进行方法调用,怎么就说调就调了?
使用javap的反编译命令(javap命令如何使用查看反编译字节码),查看java代码编译后的汇编代码似乎可以一窥原因(思路启发来自Java中integer装箱是如何自动调用valueOf函数)
测试demo所在文件夹:
![](https://img.haomeiwen.com/i15518672/78d2ab16e66485fe.png)
command命令窗口中执行javap反编译后的汇编代码与java源代码对比
执行的cmd命令为 javap -c Test.class
![](https://img.haomeiwen.com/i15518672/07943bc5c8613762.png)
故此猜想:由语句
Integer a = 3;
跳转到Integer中的valueOf()方法,是由java的底层代码实现的(或许是汇编实现,或者C?)