Integer包装类问题

weixin_45718499 2020-10-23 10:42:45

这两种方式赋值有什么区别?
还有就是它可以用equals方法比较吗?
...全文
19718 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 qybao 的回复:
[quote=引用 4 楼 qq_42588815 的回复:][quote=引用 1 楼 qybao 的回复:]稍微有点区别 -128到127范围内的自动装箱有内置缓存 也就是 Integer n1=100; Integer n2=100; n1==n2; 而 Integer n1=new Integer(100); Integer n2=new Integer(100); n1!=n2 可以用equals比较的,对象类型都是通过equals来比较的,不能用==,Integer的-128到127范围的自动装箱例外
没看明白 n1!=n2是因为对象的存放的地址不同嘛[/quote]是,new Integer(100)对象在堆里,n1和n2指向堆里的地址不同,所以n1!=n2。 Integer n1=100对象在常量池里,n1和n2都指向常量池的对象,所以n1==n2。 这就是区别 这回看懂了吗?[/quote] 了解了 谢谢
明白畅达 2020-10-26
  • 打赏
  • 举报
回复
Integer类似于对象,每次创建的地址值都不一样。而==比较的是内容和地址值,equals比较内容本身是否相同。所以包装类一般用equals比较。
楼上说的-127-128除外,是因为分装时处理这一部分数,每次new使用的是已缓存对象,不再重新创建对象,所以地址值仍然相同。
SilentHunter460 2020-10-26
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
稍微有点区别 -128到127范围内的自动装箱有内置缓存 也就是 Integer n1=100; Integer n2=100; n1==n2; 而 Integer n1=new Integer(100); Integer n2=new Integer(100); n1!=n2 可以用equals比较的,对象类型都是通过equals来比较的,不能用==,Integer的-128到127范围的自动装箱例外
请问这点内置缓存的实际意义有多大?这么点东西就算不共用内存,好像也占不了多少内存啊。
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
稍微有点区别 -128到127范围内的自动装箱有内置缓存 也就是 Integer n1=100; Integer n2=100; n1==n2; 而 Integer n1=new Integer(100); Integer n2=new Integer(100); n1!=n2 可以用equals比较的,对象类型都是通过equals来比较的,不能用==,Integer的-128到127范围的自动装箱例外
+1
KeepSayingNo 2020-10-26
  • 打赏
  • 举报
回复
这两种写法的关键就是看谁在堆区创建了对象,如果创建了对象就不能用==比较,那样肯定不相等
qybao 2020-10-25
  • 打赏
  • 举报
回复
引用 4 楼 qq_42588815 的回复:
[quote=引用 1 楼 qybao 的回复:]稍微有点区别 -128到127范围内的自动装箱有内置缓存 也就是 Integer n1=100; Integer n2=100; n1==n2; 而 Integer n1=new Integer(100); Integer n2=new Integer(100); n1!=n2 可以用equals比较的,对象类型都是通过equals来比较的,不能用==,Integer的-128到127范围的自动装箱例外
没看明白 n1!=n2是因为对象的存放的地址不同嘛[/quote]是,new Integer(100)对象在堆里,n1和n2指向堆里的地址不同,所以n1!=n2。 Integer n1=100对象在常量池里,n1和n2都指向常量池的对象,所以n1==n2。 这就是区别 这回看懂了吗?
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
稍微有点区别 -128到127范围内的自动装箱有内置缓存 也就是 Integer n1=100; Integer n2=100; n1==n2; 而 Integer n1=new Integer(100); Integer n2=new Integer(100); n1!=n2 可以用equals比较的,对象类型都是通过equals来比较的,不能用==,Integer的-128到127范围的自动装箱例外
没看明白 n1!=n2是因为对象的存放的地址不同嘛
qybao 2020-10-24
  • 打赏
  • 举报
回复
稍微有点区别 -128到127范围内的自动装箱有内置缓存 也就是 Integer n1=100; Integer n2=100; n1==n2; 而 Integer n1=new Integer(100); Integer n2=new Integer(100); n1!=n2 可以用equals比较的,对象类型都是通过equals来比较的,不能用==,Integer的-128到127范围的自动装箱例外
licip 2020-10-24
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
稍微有点区别
-128到127范围内的自动装箱有内置缓存
也就是
Integer n1=100;
Integer n2=100;
n1==n2;

Integer n1=new Integer(100);
Integer n2=new Integer(100);
n1!=n2

可以用equals比较的,对象类型都是通过equals来比较的,不能用==,Integer的-128到127范围的自动装箱例外
+1
是崔师傅呀 2020-10-24
  • 打赏
  • 举报
回复
Integer x = 100;//自动装箱,如果在-128到127之间,则值存在常量池中
Integer y = new Integer(100);//普通的堆中的对象

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧