我们先来看一个代码段:
Integer x = 127;
Integer y = 127;
Integer m = 99999;
Integer n = 99999;
System.out.println("x == y: " + (x==y)); // true
System.out.println("m == n: " + (m==n)); // false
为什么第一次进行等值比较结果为true,而第二次的结果却是false?
这是由于Integer在其内部的缓存池内把“-128-127”的值已经创建好了,这样可以节省内存空间,避免造成不必要的浪费,在进行比较时,由于第一组值使用缓存池中的127,而第二种情况,超出缓存池范围。
在调用时,我们可以直接调用,也可以使用valueOf()方法进行调用
//采用Integer类的缓存池(-128-127)
Integer i5 = Integer.valueOf(1221);
Integer i6 = Integer.valueOf("1221");
但如果使用Integer的构造方法来申明,本质上是开辟新内存空间,两个对象在使用“==”进行比较时,返回值永远都是false。
//采用构造方法
Integer i3 = new Integer(11); //int
Integer i4 = new Integer("11"); // String
System.out.println(i3 == i4);
System.out.println(i3.equals(i4));