如何比较两个整数对象?

How to compare two integer object?

Integer i = new Integer(0);
Integer j = new Integer(0);
while(i <= j && j <= i && i !=j ){
    System.out.println(i);
}

为什么会执行这个while循环? 我明白 i != j。但分开来看,i <= jj <= i returns 都是正确的。为什么?这不是说 i == j 吗?在那种情况下,while 循环甚至不应该执行一次。但它会进入无限循环。为什么会这样?

== 对于对象,比如大写-I Integer,比较引用。 <=>= 将拆箱 Integer 对象并比较数值,这是完全不同的。

认为 ==!= 在这种情况下与 Integer 的值完全无关。

虽然 == 可以在两个引用之间执行(并且是,当双方都是 Integer 时),但 <= 不能 - 所以编译器拆箱。因此,您的代码相当于:

while (i.intValue() <= j.intValue() &&
       j.intValue() <= i.intValue() &&
       i != j)

现在,当 ij 引用具有相同值的不同 Integer 对象时,将满足所有这些条件 - 因此循环继续执行。

"<=" 正在比较值,而 "!=" 引用因此这里所有情况都是真实的因此它进入无限循环。

尝试:

while(!i.equals(j))

您正在使用 == 比较两个整数对象,而不是两个原始 int 值。也就是说,"Integer" 是一个对象,而 int 是一个原始值。在一个对象上执行 != 对于 Integer(0) 和 Integer(0) 将 return 为真,因为它们确实不相等 -> 每个在内存中都有一个单独的位置。

"new" 运算符在堆上分配动态内存。 要使 == 起作用,您可以将类型更改为 int,如:

int i = 0;
int j = 0;

这将直接比较值。

如果您使用 "Integer," 另一种选择是使用 .compareTo 方法,它将比较对象的值