我是靠谱客的博主 多情朋友,最近开发中收集的这篇文章主要介绍什么是128陷阱,以及什么时候才会涉及128陷阱一:什么是128陷阱二 :什么时候涉及128陷阱,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一:什么是128陷阱

我们可以看如下例子

大多数情况下,容易有一种假象, 即基本类型与它们的对象包装器是一样的,只是它们 的相等性不同。大家知道, == 运算符也可以应用于对象包装器对象, 只不过检测的是对象是否指向同一个存储区域, 因此,上面的比较通常不会成立。

解决这个问题的办法是在 两个包装器对象比较时调用 equals 方法:

 那么为什么会举128这个数值的这个例子呢:

再看下图

 a和b还是2个包装器对象,那为什么这次变成127之后就直接可以用==比较了呢?难道他们不是包装器对象了吗,显然他们还是包装器对象,

那么为什么在-128-127之间可以直接可以用==比较呢?

因为当值在[-128, 127] 之间时,valueOf 方法不会创建新的Integer对象,而是从缓存中获取,这样一来,值相同的int,计算所得的下标是一样的,自然会获取到同一个Integer对象。而超出这个范围就不会从缓存中获取了,每次都new一个新的Integer对象,两个不同的对象的内存地址不同,用==自然会得到false。
 

回到一开始,什么是128陷阱

这时我们就可以得出以下结论

128陷阱指的是2个integer对象直接用==判定,在某个范围内可以判true,而超出这个范围则为false

二 :什么时候涉及128陷阱

当2个包装器对象比较大小时

JDK1.5之后,编译器提供了自动拆箱和装箱的功能

自动装箱与自动拆箱:

自动装箱是指:当我们用int类型赋值给Integer时会自动调用Integer.valueOf()这个方法来赋值给Integer对象,如下图

 Integer aa = 10; //自动装箱 Tnteger aa =
Integer.valueOf(10);

自动装箱规范要求 boolean、byte、char 127, 介于 -128 ~ 127 之间的 short 和 int 被包装到固定的对象中。例如,如果在前面的例子中将 a 和 b 初始化为 100,对它们进行比较的结果一定成立

自动拆箱

自动拆箱就是,我们直接用Intger类型对象直接复制给int对象时,会自动调用 .intValue()这个方法赋值给int


int bb = aa; //自动拆箱
int x1 = xx.intValue();

好了,这次的文章就到这里,喜欢的同学可以点赞收藏,遇到问题,可以评论,或者留言,我一定会第一时间给到回馈,感谢观看!!

注:本文为本人学习时心得分享,有讲错或者需要改正的地方,请指正,我会虚心接受

最后

以上就是多情朋友为你收集整理的什么是128陷阱,以及什么时候才会涉及128陷阱一:什么是128陷阱二 :什么时候涉及128陷阱的全部内容,希望文章能够帮你解决什么是128陷阱,以及什么时候才会涉及128陷阱一:什么是128陷阱二 :什么时候涉及128陷阱所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部