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
这样的对象。
答案 0 :(得分:3)
我认为parseInt返回一个原语,而不是像valueOf这样的对象。
unlink($img)
返回一个parseInt
,但是您将其分配给一个int
变量,这将导致自动装箱。由于值Integer
的{{1}}被自动装箱两次,因此每次创建新的int
实例(由于444
缓存不能用于该值) ),因此将它们与Integer
进行比较会返回Integer
。
如果将==
的输出分配给false
,则在两种情况下比较将返回parseInt
:
int