现在的位置: 首页 > 综合 > 正文

研究Integer的自动装箱

2013年10月04日 ⁄ 综合 ⁄ 共 1368字 ⁄ 字号 评论关闭

今天突然间有位同学问我,以下这段代码输出什么:

实际运行了一下:true,false

原因是:在100自动装箱成Integer时,调用的是Integer.valueOf(int i)这个方法,而在-128到127间是有缓存的

因此,Integer i = 100和Integer j = 100会返回同一个实例,引用相同,故而为true;但是200不在-128到127之间,因此返回的引用是不同的,故而为false。
但是那位同学又问我,为什么在自动装箱时调用的是Integer.valueOf(int i),这个我一时真没想出来。后来突然间大悟,因为自动装箱是编译时的行为

,为何我不先将代码编译,然后用javap将其恢复成jvm指令呢?
代码如下:

javap -c Test/Test1 > temp,得到如下结果:

可以看出,在自动装箱时的确调用的是Integer.valueOf(int i)

【上篇】
【下篇】

抱歉!评论已关闭.