Java使用Integer.parseInt进行比较

时间:2018-07-31 10:56:49

标签: java parseint autoboxing

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返回一个对象,并且包装器类缓存的值在-128到127范围内的对象。如果valueOf传递了该范围内的任何值,则它应重新使用该对象。缓存。否则,它将创建一个新对象。

现在,为什么第二个输出打印为false?我以为parseInt返回一个原语,而不是像valueOf这样的对象。

1 个答案:

答案 0 :(得分:3)

  

我认为parseInt返回一个原语,而不是像valueOf这样的对象。

unlink($img) 返回一个parseInt,但是您将其分配给一个int变量,这将导致自动装箱。由于值Integer的{​​{1}}被自动装箱两次,因此每次创建新的int实例(由于444缓存不能用于该值) ),因此将它们与Integer进行比较会返回Integer

如果将==的输出分配给false,则在两种情况下比较将返回parseInt

int