128陷阱解析(Java中的128陷阱)
2022/1/15 11:04:17
本文主要是介绍128陷阱解析(Java中的128陷阱),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原始类型:boolean,char,byte,short,int,long,float,double;
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double;
上面是比较常见的数据类型;下面说一下int 和Integer的区别吧
Ingeter是int的包装类,Integer变量必须实例化后才能使用,实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象,常自动装箱拆箱;
简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型
而int则是直接存储数据值 ,int的初值为0,Ingeter的初值为null
Integer s =10; //自动装箱 Integer a1= Integer.valueOf(10)//存在于堆里的对象 s=11;//相当于将s的值指到了11的地址. //自动装箱
integer a=10; int b=a.intValue;//拆箱 Integer c=a+4;//自动装箱和自动拆箱 system.out.println(c);
由上述的代码的到的不同结果,得到了 自动装箱规范要求 : boolean , byte , char <= 127 , 介于 -128 ~ 127 之间的 short 和 int 被包装到固定的对象中 .
所以当 Integer a = 127 , Integer b = 127 时 , a 和 b 被包装到同一个对象中 , 所以 用 == 号判断时, 认为是相等的. 而当等于
128 时,则是分装在两个对象中的 , 自然地址也不会相等 , 所以 == 号 判断结果为 false . 超过128 结果也是一样的 .
所以在比较两个包装类的对象时, 尽量使用 equals 方法 ,这样可以得到你想要的结果 , 使用 == 号容易导致 128陷阱 .
简单来讲就是:在小于127大于-128的时候,自动装箱的是同一个地址存在的数值.大于127时,自动装箱的不是同一个。
这就是所谓的 “128陷阱” .
注:
包装器的存在使得构造的值不能改变.
equals:判断的是两个对象的内容
==判断的是地址是否相同
————————————————
版权声明:本文为CSDN博主「牧 码人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38697767/article/details/102383659
这篇关于128陷阱解析(Java中的128陷阱)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?