int 是Java的八种基本数据类型中的一种,
八种基本数据类型分别为 byte short int long float double char boolean
对应的包装类分别为 Byte Short Integer Long Float Double Character Boolean。
Integer 就是int所对应的包装类,它是一个对象。
看看下面这道题,代码如下:
当我们给一个Integer对象赋一个int值的时候,会调用Integer类的静态方法valueOf
下面是valueOf的源码:
在IntegerCache中cache数组初始化如下,存入了-128 - 127的值
> 从上面我们可以知道给Interger 赋予的int数值在-128 - 127的时候,直接从cache中获取,这些cache引用对Integer对象地址是不变的,但是不在这个范围内的数字,则new Integer(i) 这个地址是新的地址,不可能一样的。
简单的说,如果整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的f1==f2的结果是true,而f3==f4的结果是false。