Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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 将整数和int与==_Java_Integer_Wrapper_Autoboxing_Unboxing - Fatal编程技术网

Java 将整数和int与==

Java 将整数和int与==,java,integer,wrapper,autoboxing,unboxing,Java,Integer,Wrapper,Autoboxing,Unboxing,上述条件返回true 为什么会这样?这些代码片段之间有什么区别?在一种情况下,您正在比较两个整数对象引用。在另一种情况下,您正在比较两个ints。当使用=操作符比较对象引用时,如果它们不是同一对象,即使它们包装了相同的值,它也将返回False。第一个代码段: 您正在比较对象引用,这意味着对象也指向特定的对象引用。在本例中,您比较的是一个整数,它是int的包装类 第二段代码片段: 您正在将一个“int”与另一个“int”进行比较 示例: 这样想:如果两个人的名字是John,在第一个场景中我们比较的

上述条件返回
true


为什么会这样?这些代码片段之间有什么区别?

在一种情况下,您正在比较两个
整数
对象引用。在另一种情况下,您正在比较两个
int
s。当使用
=
操作符比较对象引用时,如果它们不是同一对象,即使它们包装了相同的值,它也将返回
False

第一个代码段: 您正在比较对象引用,这意味着对象也指向特定的对象引用。在本例中,您比较的是一个整数,它是int的包装类

第二段代码片段: 您正在将一个“int”与另一个“int”进行比较

示例:

这样想:如果两个人的名字是John,在第一个场景中我们比较的是John,而在第二个场景中我们只比较John。我希望这有帮助

  • 在第一个示例中,您正在比较引用。在您的示例中,有两个具有不同引用和相同值的不同对象

  • 在第二个示例中,您使用的是在堆栈内存中创建新整数的自动取消装箱,以及按预期工作的整数比较。如果为空,自动取消装箱可能会产生NullPointerException


对象应与
.equals
方法进行比较

List<Integer> test = List.of(955, 955);
int a = test.get(1);
int b = test.get(0);
if (a == b)
...
List test=List.of(955955);
if(test.get(1).equals(test.get(0)))
原语(int、double、long..等)可以与==进行比较

但是像(Integer、Double、Long)这样的对象必须与
.equals()

如果将==用于对象,则将比较对象的引用,而不是对象包含的实际值

andrewjames的评论所示,在某些情况下,它看起来像==正确比较了2个整数对象,如以下示例所示,但这只是一个特殊情况


不同之处在于自动取消装箱。在第一次比较中,您使用
=
比较两个
整数
对象,只有当它们是同一个对象时,这才是真的(即,如果它们是具有相同值的不同对象,则不会进行相等的比较)。在第二种情况下,将它们都解装箱到
int
值中,其中
=
比较实际值(因为这是
int
唯一具有的值)。
test.get(1)==test.get(0)
比较引用等式(因为
test.get(…)
返回一个
Integer
),而
int a=test.get(1);int b=测试。获取(0);如果(a==b){…}
自动将
整数
s装箱到
int
s中,然后比较值相等。我觉得你的答案有点漏洞百出。即
Integer
int
之间的差异,即包装类。除此之外,它当然是正确的。@Zabuzard啊,好吧,我对我的答案进行了编辑来解释这一点!感谢您让我知道如果您将
4
更改为
128
,会发生什么情况?瞧。@andrewjames你说得对!
List<Integer> test = List.of(955, 955);
int a = test.get(1);
int b = test.get(0);
if (a == b)
...
List<Integer> test = List.of(955, 955);
if (test.get(1).equals(test.get(0)))