Integer n1 = 123; Integer n2 = 123; Integer n3 = 128; Integer n4 = 128; System.out.println(n1 == n2);// true System.out.println(n3 == n4);// false System.out.println(n3.intValue()==n4.intValue());// true System.out.println(128==n3);// true System.out.println(128==n4);// true // 对象的hashcode值 System.out.println(System.identityHashCode(n1));// 366712642 System.out.println(System.identityHashCode(n2));// 366712642 System.out.println(System.identityHashCode(n3));// 1829164700 System.out.println(System.identityHashCode(n4));// 2018699554
为什么 n3==n4 是false呢,因为Integer 对象是在 Integer.IntegerCache 中产生的 ,而 -128- 127的值已经被缓存了,当新的Integer对象在此区间时,会被复用;不在此区间时会在堆上产生新的对象。所以,n1 n2 的hashcode一样的,而n3 、n4 的hashcode 是不一样的
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步