在Integer类中定义了成员内部类IntegerCache
* 在这个内部类中有一个静态代码块,这个代码块中创建了
* Integer类型的数组,共计有256个空间,
* 紧接着使用循环给Integer数组进行初始化。
* 将-128到127之间的256个数字已经封装成Integer对象存放在数组中。
*
* 只要在程序中使用到的Integer类,就会自动的加载内部类IntegerCache。
* 内部类中就会将上述-128到127已经存储在数组中。
* 我们在程序中需要使用-128到127之间的Integer类型的数据时,
* 这时JVM不会再将我们制定的这些数据封装成对象,而是到IntegerCache内部维护的那个数组中
* 找到-128到127之间已经存在的这个对象,将这个对象的地址赋值给我们的程序中的引用变量。
public class Test {
public static void main(String[] args) {
//下面两行代码,其实并没有单独的去封装Integer对象,而是找缓存中的对象
Integeri = -128;
Integeri2 = -128;
//下面两行代码,指定的数据由JVM单独去封装成Integer对象
Integeri3 = -129;
Integeri4 = -129;
System.out.println(i == i2); //true
System.out.println(i3 == i4); //false
Integeri5 = new Integer(127);
Integeri6 = new Integer(127);
System.out.println(i5 == i6); //false
}