自动拆箱与装箱

有一个自动拆箱与装箱引出的问题:


		Integer i = 126;
		Integer j = 126;
		System.out.println("i==j="+(i==j));
		System.out.println("i.equals(j)="+i.equals(j));
		
		Integer m = 128;
		Integer n = 128;
		System.out.println("m==n="+(m==n));
		System.out.println("m.equals(n)="+m.equals(n));

结果是:

		i==j=true
		i.equals(j)=true
		m==n=false
		m.equals(n)=true


执行Integer i = 126,实际是系统为我们执行了Integer i= Integer.valueOf(126);在Integer中源码是:

 	 public static Integer valueOf(int i) {
         	assert IntegerCache.high >= 127;
        	if (i >= IntegerCache.low && i <= IntegerCache.high)
	            return IntegerCache.cache[i + (-IntegerCache.low)];
        	return new Integer(i);
    	}

所以数值在-128~127范围内的,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象); 其他的是返回一个新建出来的Integer对象。

自动拆箱(unboxing),也就是将对象中的基本数据从对象中自动取出


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值