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 之间的值。