JAVA中Integer存在内部类缓冲区

本文探讨了Java中Integer类的equals方法与==运算符在比较整数对象时的不同,重点讲解了两者在比较128及以上数值时的区别,并揭示了Integer缓存区的工作原理。通过实例演示,展示了缓存如何影响对象创建和比较结果。
摘要由CSDN通过智能技术生成
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[];
		        	
		        	....
		        	
		        	
				 * 
				 * */
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值