ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

128陷阱解析(Java中的128陷阱)

2022-01-15 10:58:47  阅读:117  来源: 互联网

标签:Java int 包装 自动 陷阱 128 Integer 装箱


原始类型: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

标签:Java,int,包装,自动,陷阱,128,Integer,装箱
来源: https://blog.csdn.net/qq_52467117/article/details/122507160

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有