https://www.nowcoder.com/feed/main/detail/f1606acb7e93459f98340d7d9f3d9c6d

在Java中,使用 new Integer(1) 创建的两个对象 ab 是不相等的。

Integer a = new Integer(1);
Integer b = new Integer(1);

System.out.println(a == b); // 输出 false

a == b 比较的是对象的引用,而不是值。由于 ab 是两个不同的对象,它们的引用不同,因此 a == bfalse

如果要比较它们的值是否相等,应该使用 equals() 方法:

System.out.println(a.equals(b)); // 输出 true

a.equals(b) 比较的是 ab 的值,因此结果为 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 之间的值。