Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java使用Integer.parseInt进行比较_Java_Parseint_Autoboxing - Fatal编程技术网

Java使用Integer.parseInt进行比较

Java使用Integer.parseInt进行比较,java,parseint,autoboxing,Java,Parseint,Autoboxing,我理解为什么第三个和第四个输出打印正确和错误。这是因为valueOf返回一个对象,而包装类缓存值在-128到127之间的对象。如果valueOf传递了该范围内的任何值,它应该重用缓存中的对象。否则,它将创建一个新对象 现在,为什么第二个输出输出为false?我认为parseInt返回一个原语,而不是像valueOf那样的对象 我认为parseInt返回的是一个原语,而不是像valueOf那样的对象 parseInt返回一个int,但将其分配给一个整数变量,这会导致自动装箱。由于值为444的int

我理解为什么第三个和第四个输出打印正确和错误。这是因为
valueOf
返回一个对象,而包装类缓存值在-128到127之间的对象。如果
valueOf
传递了该范围内的任何值,它应该重用缓存中的对象。否则,它将创建一个新对象

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

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

parseInt
返回一个
int
,但将其分配给一个
整数
变量,这会导致自动装箱。由于值为
444
int
自动装箱两次,因此每次创建新的
Integer
实例时(因为
Integer
缓存不能用于该值),因此将其与
=
进行比较将返回
false

如果将
parseInt
的输出分配给
int
,则在这两种情况下,比较将返回
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

因为您正在将其自动装箱为
整数
…@TimBiegeleisen。我不同意这是那个的复制品。它确实解释了您应该比较Integer对象的
.intValue()
,并且还提供了关于它的一般附加信息。但它没有回答OP提出的实际问题。因此,我投票决定重新打开。@KevinCruijssen指的是添加的讨论整数常量池的链接,它解释了上述问题。这个问题被反复问。至于回答这个问题。在
.valueOf
方法中执行以下操作:
返回新整数(parseInt(s,10,false))。如您所见,它在内部使用
.parseInt
,并将其放入
整数
-构造函数中以创建一个
整数
-实例
.parseInt
确实返回了一个原语:
返回parseInt(s,10,false)。但是,由于您将其保存在一个
整数
字段中,因此会发生自动装箱,其行为与
.valueOf
方法中构造函数的使用有些类似。
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