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)))