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
变量,这会导致自动装箱。由于值为 444
的 int
被自动装箱两次,每次都会创建一个新的 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
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
变量,这会导致自动装箱。由于值为 444
的 int
被自动装箱两次,每次都会创建一个新的 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