java - 在Java中使用==运算符来比较包装对象

标签 java integer wrapper equals operator-keyword

我正在阅读 Kathy Sierra 和 Bert Bates 撰写的 SCJP Java 6,这本书让我很困惑。在第 245 页,他们声明了以下代码。

Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2)
System.out.println("different objects");

//Prints output
different objects

然后在下一页上有以下代码

Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4)
System.out.println("same objects");

//Prints output
same objects

我很困惑!当我自己尝试这个时,似乎您不能使用 == 来像使用 equals() 方法一样进行比较。即使整数变量设置为相同的值(即 10),使用 == 总是给我“假”。我对么?使用 == 比较相同的 Integer 对象(具有相同的值)将始终导致“false”

最佳答案

答案的关键称为对象驻留。 Java interns 小数字(小于 128),因此 interned 范围内具有 n 的所有 Integer(n) 实例都是相同的。大于或等于 128 的数字不会被保留,因此 Integer(1000) 对象彼此不相等。

关于java - 在Java中使用==运算符来比较包装对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31547133/

相关文章:

java - Hibernate session.update 插入行而不是更新行

linux - x64 位汇编

python - 在 Python 中随机舍入为整数

java - 如何在Java中为包装对象实现高效的哈希码?

c# - 如何为 C# 包装具有多种类型的 C++ 结构?

Java:这两个包装类语句之间的区别

java - 如何使用同一个 shell 通过 JSCH 执行多个 unix 命令?

java - JPA 查找表值

java - 在windows中设置类路径

Java 给定整数的字符串排列