Java学习 --128陷阱

        包装类是Java为每种基本数据类型(int,short,long等)提供的对象表示形式,它们将基本数据类型"包装"成对象,使得基本类型也能以对象的形式使用。由于Java是面向对象的语言,很多API和容器类只能操作对象,为了接近这个问题,Java便提供了包装类,其包含了各种实用方法(如类型转换、进制转换等),也接近了基本类型不能为null的问题。而在int的包装类Integer中存在一个名为128陷阱的问题,其具体情况如下:

其输出结果如下:

可以看到,在-128到127中间,Integer是可以通过==进行正确的比较,而一旦超过这个区间,就会发生错误,这就是所谓的128陷阱,即Integer通过==只能在-128到127之间进行比较,超过这个就不能进行比较。而这是因为Integer有一个缓存:

其中的low和high为其缓存的上下限,可以看到,high==h==127,low==-128,说明这个缓存可以缓存在-128到127里的int,如果使用在在这个区间里的数字创建Integer类,实际上是从这个缓存里取出对应的数字的Integer,而如果不在这个区间的数值创建Integer,则是new了一个新的Integer,前者不管创建多少个,其指向的地址都是一样的,而后者每一个都是new了一个新的Integer,地址自然也都不相同,使用==自然也就比较不出来,通常为了解决这个问题,我们应该使用equals()方法进行比较,如下图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值