Java Integer自动拆装箱的128陷阱问题

这是一个很偏的知识点,可能有的人只是知道Integer类是int的包装虽然特么类,它的对象是应用对象, 其实不然。

注意:

自动装箱规范要求boolean,byte,char在-128~127之间的short和int被包装到固定的对象中。对于Integer类型的变量,在以上的范围内的变量值,直接指向常量池中的缓存地址,不会new开辟出新的空间。

下面是验证的代码:


		Integer a = 100;
		int b = 100;
		System.out.println(a==b);;//  比较两个变量的地址
		System.out.println(a.equals(b));//  比较两个变量的数值true
		

		Integer c1 = 128;
		Integer d1 = c1;
		System.out.println(c1==d1);//指向同一块内存空间 ,比较的是两个变量的地址   true
		
		Integer c = 128;
		Integer d = 128;            //各自new出新的内存空间
		System.out.println(c == d);//比较两个变量的地址      false
		System.out.println(c.equals(d));//比较两个变量的数值    true
		Integer g = 100;
		Integer h = 100;
		System.out.println(g == h);//比较两个变量的地址  true   显然g 和 h 指向的是同一块缓存 
		System.out.println(g.equals(h));//比较两个变量的数字   true
		
		Integer e = 228;
		int f = 228;
		System.out.println(e == f);//比较两个变量的地址   true
		System.out.println(e.equals(f));//比较两个变量的数值     true
		
		int i = 100;
		int j = 100;
		System.out.println(i == j);  //比较的是数值   而对于数值类型,==比较的是两者的数值大小
	

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值