Integer引用问题

千羽12138 2019-07-17 06:30:39
今天发现了个神奇的事情
public static void main(String[] args) {
Integer a = 128;
int c = 128;
Integer b = 128;
System.out.println(a==b);
}

a==c我理解,b==c我理解,a!=b我理解
连一起的就不理解了,这什么鬼
==不就是以内存引用地址判断的吗?
jdk9 new Integer(1)为什么弃用了,要用自动装箱代替吗?
...全文
170 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwmlow 2019-07-18
  • 打赏
  • 举报
回复
通俗的讲,取值在-128~127范围内,都会调Interger的静态缓存,超出则new开辟新的内存引用地址
蓝莓之恋9527 2019-07-18
  • 打赏
  • 举报
回复
看下源码你就知道为什么了,参考下这个
https://blog.csdn.net/womenghuangliang/article/details/17377285
冠辰 2019-07-18
  • 打赏
  • 举报
回复
封装类和基本类型比较的时候会自动拆箱,类与类比较看地址 a,b虽然int值相同 但是不是一个类 所以不相等
行云边 2019-07-18
  • 打赏
  • 举报
回复
2楼和4楼结合起来,能回答楼主的问题。如果把128改成12,所有的比较都是true。
weixin_42392002 2019-07-18
  • 打赏
  • 举报
回复
https://blog.csdn.net/xingkongdeasi/article/details/79618421 a== b,c==b,Integer是int的封装类,当Integer与int进行==比较时,Integer就会拆箱成一个int类型,所以还是相当于两个int类型进行比较,这里的Integer,不管是直接赋值,还是new创建的对象,只要跟int比较就会拆箱为int类型,所以就是相等的 a==c,这是两个不同的对象,这里比较的是两个不同对象的内存地址,所以是不等的。
guishuanglin 2019-07-18
  • 打赏
  • 举报
回复
楼主, 前两个是值比较, 后面是对象比较, 比的东西不一样, 所以你说的连在一起不理解? 根本不能连一起理解.....因为不是一个东西.

62,614

社区成员

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

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