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陷阱)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-12百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide