Integer是int的封装类,两者在进行比较时会自动拆箱,所以两者的 ==比较只看值是否相等。
Integer a = 1250; int b = 1250; System.out.println(a == b); // trueInteger作为类,理论上进行==比较时必须要是相同的对象才返回true,但为了减少内存占用,jdk中Integer的实现用到了一个静态内部类IntegerCache:
该静态内部类维护了一个Integer[]数组 cache,默认的取值范围为 low = -128; high = 127;,并通过下面的代码给数组赋值:
Integer对象的创建:
有很多创建方式:
通过构造方法创建,已经被弃用通过valueOf()静态方法自动装箱,编译时会调用 valueOf()方法查看valueOf()方法,可以发现在静态类的缓存范围内使用Integer对象都是被缓存了的,所以比较时是 true:
而超出缓存范围的数据比较则是false:
Integer a = 1250; Integer b = 1250; System.out.println(a == b); // false