- 联系方式:1761430646@qq.com
- 菜狗摸索,有误勿喷,烦请联系
1.int, new Integer(), Integer比较区别
1.1 基本区分
int
是Java的一种基本类型,而Integer
是对象的引用,是int
的包装类int
默认值为0,而Integer
默认值为null
int
是直接存储数据值,Integer
则是生成一个指针指向此对象
1.2 两个new Integer()的比较–永远为false
-
==号对象之间比较的是内存地址,基本数据类型比较的是数值大小
-
由于不同对象指向不同的内存地址,所以一直为false
1.3 两个(使用自动装箱生成的)Integer变量比较
-
结论:
- 如果两个变量值均在在-128 ~ 127之间,则比较结果为true,否则为false
-
理由:
-
Integer i = 100
的底层实际上是Integer i = Integer.valueOf(100)
,而在Integer类中有个缓存数组,其值范围为-128 ~127,当调用Integer.valueOf()
方法时,如果参数值在这个范围内,则立马返回此缓存数组中对应的指引,否则new Integer()
出来
-
1.4 Integer变量(自动装箱)和new Integer()变量比较
- 结论:永远不相等
- 理由
- 从上述可知,
Integer i = xxx
实际上所引用的对象要不是重新new出来,要不是就是指向Java常量池中的,而正常的new Integer()
是在堆中新建的对象,两者在内存中的地址不同
- 从上述可知,
1.5 int变量和Integer、new Integer()比较
- 结论:只要两个的数值是相等的,则为true,否则为false
- 理由:
- 当包装类Integer和基本数据类型int比较时,Java会自动拆箱为int,然后进行数值上的比较