如何比较两个整数对象?
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 <= j
和 j <= i
returns 都是正确的。为什么?这不是说 i == j
吗?在那种情况下,while 循环甚至不应该执行一次。但它会进入无限循环。为什么会这样?
==
对于对象,比如大写-I Integer
,比较引用。 <=
和 >=
将拆箱 Integer
对象并比较数值,这是完全不同的。
认为 ==
和 !=
在这种情况下与 Integer
的值完全无关。
虽然 ==
可以在两个引用之间执行(并且是,当双方都是 Integer
时),但 <=
不能 - 所以编译器拆箱。因此,您的代码相当于:
while (i.intValue() <= j.intValue() &&
j.intValue() <= i.intValue() &&
i != j)
现在,当 i
和 j
引用具有相同值的不同 Integer
对象时,将满足所有这些条件 - 因此循环继续执行。
"<=" 正在比较值,而 "!=" 引用因此这里所有情况都是真实的因此它进入无限循环。
尝试:
while(!i.equals(j))
您正在使用 == 比较两个整数对象,而不是两个原始 int 值。也就是说,"Integer" 是一个对象,而 int 是一个原始值。在一个对象上执行 != 对于 Integer(0) 和 Integer(0) 将 return 为真,因为它们确实不相等 -> 每个在内存中都有一个单独的位置。
"new" 运算符在堆上分配动态内存。
要使 == 起作用,您可以将类型更改为 int,如:
int i = 0;
int j = 0;
这将直接比较值。
如果您使用 "Integer," 另一种选择是使用 .compareTo 方法,它将比较对象的值
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 <= j
和 j <= i
returns 都是正确的。为什么?这不是说 i == j
吗?在那种情况下,while 循环甚至不应该执行一次。但它会进入无限循环。为什么会这样?
==
对于对象,比如大写-I Integer
,比较引用。 <=
和 >=
将拆箱 Integer
对象并比较数值,这是完全不同的。
认为 ==
和 !=
在这种情况下与 Integer
的值完全无关。
虽然 ==
可以在两个引用之间执行(并且是,当双方都是 Integer
时),但 <=
不能 - 所以编译器拆箱。因此,您的代码相当于:
while (i.intValue() <= j.intValue() &&
j.intValue() <= i.intValue() &&
i != j)
现在,当 i
和 j
引用具有相同值的不同 Integer
对象时,将满足所有这些条件 - 因此循环继续执行。
"<=" 正在比较值,而 "!=" 引用因此这里所有情况都是真实的因此它进入无限循环。
尝试:
while(!i.equals(j))
您正在使用 == 比较两个整数对象,而不是两个原始 int 值。也就是说,"Integer" 是一个对象,而 int 是一个原始值。在一个对象上执行 != 对于 Integer(0) 和 Integer(0) 将 return 为真,因为它们确实不相等 -> 每个在内存中都有一个单独的位置。
"new" 运算符在堆上分配动态内存。 要使 == 起作用,您可以将类型更改为 int,如:
int i = 0;
int j = 0;
这将直接比较值。
如果您使用 "Integer," 另一种选择是使用 .compareTo 方法,它将比较对象的值