java中包装类型的自动装箱

2019-06-06  本文已影响0人  一只狗被牵着走

对汇编不是很了解,本文权作自我分析,也欢迎路过的亲批评指正`_`

昨天福至心灵一般,想到Integer的自动装箱、拆箱机制,上网找几篇相关帖子琢磨琢磨,看的过程中引发一个问题: Integer的自动装箱是怎样调用方法赋值的?调用了哪个方法?

demo 使用Idea的debug功能查看调用步骤:


demo

发现下一步直接跳转到Integer的valueOf()方法:


跳转到Integer中的valueOf()方法

Integer中的源码这里不说哈,单讲从语句 Integer a = 3; 跳转到Integer中的valueOf()方法,没有按照java语法进行方法调用,怎么就说调就调了?
使用javap的反编译命令(javap命令如何使用查看反编译字节码),查看java代码编译后的汇编代码似乎可以一窥原因(思路启发来自Java中integer装箱是如何自动调用valueOf函数

测试demo所在文件夹:


demo文件夹

command命令窗口中执行javap反编译后的汇编代码与java源代码对比
执行的cmd命令为 javap -c Test.class


cmd命令窗口中执行javap反编译后的汇编代码与java源代码对比

故此猜想:由语句 Integer a = 3; 跳转到Integer中的valueOf()方法,是由java的底层代码实现的(或许是汇编实现,或者C?)

上一篇 下一篇

猜你喜欢

热点阅读