https://www.nowcoder.com/feed/main/detail/f1606acb7e93459f98340d7d9f3d9c6d
在Java中,使用 new Integer(1)
创建的两个对象 a
和 b
是不相等的。
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a == b); // 输出 false
a == b
比较的是对象的引用,而不是值。由于 a
和 b
是两个不同的对象,它们的引用不同,因此 a == b
为 false
。
如果要比较它们的值是否相等,应该使用 equals()
方法:
System.out.println(a.equals(b)); // 输出 true
a.equals(b)
比较的是 a
和 b
的值,因此结果为 true
。
从Java 9开始,new Integer(int)
已被弃用,推荐使用 Integer.valueOf(int)
,因为后者可能会返回缓存的对象,从而节省内存:
Integer a = Integer.valueOf(1);
Integer b = Integer.valueOf(1);
System.out.println(a == b); // 可能输出 true,因为值在缓存范围内
在这种情况下,a == b
可能为 true
,因为 Integer.valueOf()
会缓存 -128 到 127 之间的值。