Java 使用 Integer.parseInt 进行比较

Java using Integer.parseInt for comparison

Integer x1 = Integer.parseInt("4");
Integer y1 = Integer.parseInt("4");
Integer x2 = Integer.parseInt("444");
Integer y2 = Integer.parseInt("444");

System.out.println(x1==y1); // true
System.out.println(x2==y2); // false ???

Integer a1 = Integer.valueOf("4");
Integer b1 = Integer.valueOf("4");
Integer a2 = Integer.valueOf("444");
Integer b2 = Integer.valueOf("444");

System.out.println(a1==b1); // true
System.out.println(a2==b2); // false

我明白为什么第三个和第四个输出打印真假了。这是因为 valueOf returns 一个对象,包装器 类 缓存对象的值在 -128 到 127 范围内。如果 valueOf 传递了该范围内的任何值,它应该重用缓存中的对象。否则,它将创建一个新对象。

现在,为什么第二个输出打印出错误?我认为 parseInt returns 是原始的,而不是像 valueOf 那样的对象。

I thought parseInt returns a primitive, not an object like valueOf does.

parseInt return 是一个 int 但您将其分配给 Integer 变量,这会导致自动装箱。由于值为 444int 被自动装箱两次,每次都会创建一个新的 Integer 实例(因为 Integer 缓存不能用于该值), 所以将它们与 == returns false.

进行比较

如果您将 parseInt 的输出分配给 int,在两种情况下比较将 return true

int x1 = Integer.parseInt("4");
int y1 = Integer.parseInt("4");
int x2 = Integer.parseInt("444");
int y2 = Integer.parseInt("444");

System.out.println(x1==y1); // true
System.out.println(x2==y2); // true