@Test
public void test4() {
Integer a = new Integer(10);
Integer a1 = new Integer(10);
System.out.println(a == a1);//false,比较的是两个不同对象的地址,所以肯定不同
Integer b = 10;
Integer b1 = 10;
System.out.println(b == b1);//true,
// 首先我们应该知道随着Integer的加载,Integer中有一个静态内部类IntegerCache也会随之加载,这个内部类的加载时会生成一个包含[-128,127]的Integer对象的数组(你可以叫它是缓存,因为在这个区间的数用得最多)
// 首先b、b1是自动装箱,自动装箱其实就是自动调用了valueOf(int i),在这个方法中会判断如果i在[-128,127]之间,则会从缓存中获取。
// 因为10(<=127),所以b和b1都是从缓存中获取的同一个对象。
Integer c = 128;
Integer c1 = 128;
System.out.println(c == c1);//false,128已经超出了缓存定义的范围[-128,127],都是新建对象,对象地址相同。
}
包装类Integer底层剖析
最新推荐文章于 2025-03-16 17:18:06 发布