本次分享来源于一次做题练习,针对这个题目,根据自己的理解做了一下总结。
一、int 和 Integer 数据的比较
众所周知,Integer作为int 的包装类,它拥有自动拆箱和自动装箱的功能,所以除了Integer new 出来的对象之外,只要在[-128,127] 这个范围内,int 和 Integer 之间就可以划等号:
1、new Integer() 相当于在堆中开辟了一片新的空间,对于new 出来的对象,== 比较的是引用地址,故不相等
2、如果数据在[-128,127] 这个范围内,int 和 Integer 可以完成自动的拆装箱,最终得到的结果是一致的,那如果不在这个范围内是否相等呢,以下通过Integer 的源码进行分析。
二、Integer 源码简单分析
首先,通过java api我们知道,当程序执行
Integer i = 100;
的时候会调用 Integer.valueOf(100) 方法,但是我并没有找到源码中调用此方法的地方,通过javap反编译工具,终于发现了端倪: