public class IntegerDem04 {
public static void main(String[] args) {
//==:连接两个引用类型比较的是地址是否相同
//Integer类重写了Object类中的equal方法():比较内容是否相同
Integer i1 = new Integer(127) ;
Integer i2 = new Integer(127) ;
System.out.println(i1==i2);//false
System.out.println(i1.equals(i2));//true
System.out.println("------------------------");
Integer i3 = new Integer(128) ;
Integer i4 = new Integer(128) ;
System.out.println(i3== i4);//false
System.out.println(i3.equals(i4));//true
System.out.println("-------------------------");
Integer i5 = 127 ;
Integer i6 = 127 ;
System.out.println(i5==i6);//true (从IntegerCache:缓存区中取元素)
System.out.println(i5.equals(i6));//true
System.out.println("-------------------------");
Integer i7 = 128 ;//超出缓冲区大小 //new Integer(128)
Integer i8 = 128 ; //new Integer(128)
System.out.println(i7==i8);//false
System.out.println(i7.equals(i8));//true
//将整数常量赋值给Integer--->执行Integer.valueOf(int value) ;
//存在一个缓存区:范围:-128~127:
//如果将常量赋值的形式,在范围内直接在缓存区中取元素!不会new Integer(int i)
/*
* public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
//if(128 >= -128 && 182 <= 127)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i); //执行构造方法:new Integer(128)
}
IntegerCache:是Integer类中静态的成员内部类
private static class IntegerCache {
static final int low = -128;
static final int high; //127
static final Integer cache[];
....
*
* */
}
}
JAVA中Integer存在内部类缓冲区
最新推荐文章于 2023-07-17 08:50:25 发布
本文探讨了Java中Integer类的equals方法与==运算符在比较整数对象时的不同,重点讲解了两者在比较128及以上数值时的区别,并揭示了Integer缓存区的工作原理。通过实例演示,展示了缓存如何影响对象创建和比较结果。
摘要由CSDN通过智能技术生成