128陷阱

128陷阱出现在java的自动装箱这一块

自动装箱是什么呢
我们先了解一下对象包装器

在java中有时int这种基本类型需要转成对象所有的基本类型都有对应类 如Integer对应基本类型int 通常这些类称为包装器

假如说定义一个整形数组列表不能用ArrayList 这就用到了包装类integer
我们就可以声明一个list列表
ArrayList list = new ArrayList<>()
list.add(3)如果调用这个
那么自动变换成list.add(Interger.valueOf(3))这个变换称为自动装箱(打包)
相反的讲一个integer对象赋给一个int值称为自动拆箱list.get(i).intValue()

我们都知道==运算符也可以应用对象包装器对象只不过检测的对象的是否指向同一个区域因此下面通常时不成立

Integer a = 1000;
Integer b = 1000;
if(a == b) … …
然而java却有可能让他结果时true如果将经常出现的值包装到同一个对象 中这种比较就有可能成立所以我们一般比较时要调用equals方法
然而
Integer a = 100;
Integer b = 100;
if(a == b) … …
他的结果就会输出true

这是因为java规范自动装箱要求boolean byte char <= 127 介于-128~127之间 的short和int被包装到同一个固定的对象中如上面第二个例子

这就是我们所说的128陷阱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值