while( i <= j && i >= j && i != j) {}
如何声明i和j使其成为无限循环?
// 这是我遇到的一道面试题。
问题要求给出i和j的声明,使其始终为真。
我无法通过将i和j声明为数字类型来解决这个问题。还有哪些类型可以满足条件?
while( i <= j && i >= j && i != j) {}
如何声明i和j使其成为无限循环?
// 这是我遇到的一道面试题。
问题要求给出i和j的声明,使其始终为真。
我无法通过将i和j声明为数字类型来解决这个问题。还有哪些类型可以满足条件?
Integer i=new Integer(1000);
Integer j=new Integer(1000);
System.out.println((i<=j)+" "+(i>=j)+" "+(i!=j));
i
和 j
会在使用 <=
和 >=
进行比较时自动拆箱为 int,但不会在使用 !=
时自动拆箱。虽然 i
和 j
是不同的实例,但它们具有相同的整型值。这就是为什么这三个比较操作都返回 true 的原因。
i!=null
。有时您想比较实例而不是值。 - Piotr Praszmo这个方式也有效(“在我的机器上”):
Integer a = 128, b = 128;
然而,这样做是行不通的:
Integer a = 127, b = 127;
Integer i = new Integer(1);
Integer j = new Integer(1);
while( i <= j && i >= j && i != j) {}
魔法在于使用运算符!对于!=运算符,编译器将操作数视为对象(包括它们的值),而对于>=或<=运算符,编译器仅将操作数的值视为重要。因此,上述语句返回true。