欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java整型(int, Integer) 之间的比较

程序员文章站 2022-07-15 10:38:10
...

1 Integer和int比较

Integerint的封装类,两者在进行比较时会自动拆箱,所以两者的 ==比较只看值是否相等。

Integer a = 1250;
int b = 1250;
System.out.println(a == b);	// true

2 Integer之间的比较

Integer作为类,理论上进行==比较时必须要是相同的对象才返回true,但为了减少内存占用,jdk中Integer的实现用到了一个静态内部类IntegerCache

Java整型(int, Integer) 之间的比较

该静态内部类维护了一个Integer[]数组 cache,默认的取值范围为 low = -128; high = 127;,并通过下面的代码给数组赋值:
Java整型(int, Integer) 之间的比较

Integer对象的创建:

有很多创建方式:

  1. 通过构造方法创建,已经被弃用
  2. 通过valueOf()静态方法
  3. 自动装箱,编译时会调用 valueOf()方法
Java整型(int, Integer) 之间的比较

查看valueOf()方法,可以发现在静态类的缓存范围内使用Integer对象都是被缓存了的,所以比较时是 true:
Java整型(int, Integer) 之间的比较

而超出缓存范围的数据比较则是false:

Integer a = 1250;
Integer b = 1250;
System.out.println(a == b);	// false