JAVA 128陷阱

自动装箱和拆箱

首先,我们先了解一下 JAVA 的自动装箱和自动拆箱。

  • 自动装箱:基本类型自动转换为包装类型。
  • 自动拆箱:包装类型自动转换为基本类型。

请看下面代码:

package com.Y.web;
public class Num {
	public static void main(String[] args){
		int a = 5;
		Integer b = Integer.valueOf(3); //自动装箱
		Integer b1 = new Integer(6);
		a = integer.valueOf(b1).intValue(); //自动装箱再拆箱
		a = b1.intValue(); //自动拆箱
	}
}

此代码 即:当把值转化为对象时为自动装箱;把对象转化为值时为制动拆箱。

128陷阱

Integer 是包装类,在 -128 到 127 之间只有固定的 256 个值,为了避免重复,事先就创造好了一个 -128 到 127 的数组,在类加载时,如果值在这个范围内,就可以直接返回预先创建好的对象了, 如果值不在这个范围,就会创建新的对象,所以新创建的对象的地址也各不相同。

请看下面代码:

package com.Y.web;
public class Num {
 	public static void main(String[] args){
 		Integer a = 100;
 		Integer b = 100;
 		Integer a1 = 1000;
 		Integer b1 = 1000;
 		System.out.println( a==b );
 		System.out.println( a1==b1 );
 	}
 }

因为 == 比较的是前后两个对象的地址,所以根据上面的解释就知道输出的结果第一个为 true ,第二个为 false。
输出结果
这就是128 陷阱,它可以便于程序的快速运行。(如果用 equals 进行比较时,就不会进入 128 陷阱了,因为 equals 比较的是两个值是否相等。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值