我在Java测试中遇到了这个问题,必须为a
和 b
赋值,以使得这个表达式能够评估为 true:
(a<=b && b<=a && a!=b)
可悲的是,我不知道答案是什么。
我在Java测试中遇到了这个问题,必须为a
和 b
赋值,以使得这个表达式能够评估为 true:
(a<=b && b<=a && a!=b)
可悲的是,我不知道答案是什么。
这里有一个简单的技巧。
仅使用布尔逻辑无法解决此问题。使用此方法,以下组合...
a
小于或等于 b
,并且b
小于或等于 a
,并且a
不等于 b
...永远不会返回 true
。
然而,!=
运算符在其操作数是对象时比较引用。
因此,以下内容将返回 true
:
Integer a = 1;
Integer b = new Integer(1);
System.out.println(a<=b && b<=a && a!=b);
在这里发生的是:a
作为一个对象引用与 b
作为一个对象引用不相等,尽管它们存储了相同的整数值。new Integer(int value)
会定义整数池。 - Mena<=
和 >=
运算符,操作数必须可转换为基本数值类型。对于 ==
运算符,请参考 15.21.3,当且仅当两个操作数引用同一个对象时,其结果为 true。 - Marco13Number
包装类、缓存和对象相等性。我不会感到惊讶,如果在 Oracle 的 1Z0-804 考试中出现这样的问题。 - Mena
a
和b
的类型是什么? - Tunakix != x + 0
,它有三种可能的类型,以及x == -x
,它有22种可能的值/类型。 - Peter Lawreyfloat
或double
将使用破损的IEEE-754相等性,而字符串将在自身和一个以'0'结尾的新字符串之间进行引用比较。但是,任何包装类型的任何非空值都可以工作,不是吗? - supercat