这';如果';Java中三个同时表达式的求值
我在Java测试中遇到了这个问题,我必须给这';如果';Java中三个同时表达式的求值,java,Java,我在Java测试中遇到了这个问题,我必须给a和b赋值,所以这个表达式的计算结果为true: (a<=b && b<=a && a!=b) (这里有一个简单的技巧 你不能仅仅用布尔逻辑来思考这个问题。用它,这个组合 a小于或等于b,并且 b小于或等于a,并且 a不等于b …将永远不会返回true 但是,如果操作数是对象,则!=运算符会比较引用 因此,以下内容将返回true: Integer a = 1; Integer b = new Intege
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=1;
整数b=新的整数(1);
System.out.println(aa
和b
的类型是什么?a
和“b”可以是任何数字包装,只要它们相同。Byte
,Character
Integer
,long
,Float
,Double
作为!=
比较引用,但是如果你喜欢这个难题,试试x!=x+0
有三种可能的类型,x==-x
有22种可能的值/类型。最后一种只有三种?您可能认为float
或double
等于NaN将使用断开的IEEE-754等式,而字符串将在其自身和末尾为“0”的新字符串之间进行引用比较。不过,任何包装类型的非空值都会起作用吗?这是一个多么可怕的测试问题。希望这是一个高级主题。@OldCurmudgeon-他使用的是新整数(1);
它不会从本地缓存返回值(不像Integer.valueOf()
)。所以我想这很好:)@OldCurmudgeon正要回答,但ThwLostMind打败了我。显式初始化一个新整数(int值)
玷污了实习。我试图在JLS中找到一段可以保证这一点的文章,但我没有任何运气……也无法确定它是否有效。有人有引用吗?@JörgWMittag看到:对于=
“…操作数…必须…转换为原始数字类型”,对于=
@Mena,“…如果两者都引用同一对象,则==的结果为真”这些知识是必要的,但不足以回答此问题,特别是考虑到它取决于通常不受欢迎的行为(使用!=
比较引用)。如果我向某人展示答案并让他们发现错误,我非常希望他们能找到它;但反过来说,呈现看似错误的行为并让某人创建触发错误的错误代码……这对我来说似乎没那么有用。我猜是YMMV.)