class test {
public static void main(String[] args){
Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1==o2 + " " + o1.equals(o2));
}
}
我理解为什么o1==o2
和o1.equals(o2)
都是false
,但为什么只打印"false"
而不是"false false"
?
答案 0 :(得分:8)
这是因为==用作比较两个部分的表达式。
将 o1 与整个 o2 +“”+ o1.equals(o2) 字符串进行比较。
我添加了空格以便更好地查看它。
System.out.println(o1 == o2 + " " + o1.equals(o2));
如果你想要双重假。这是修改后的println语句。
System.out.println((o1 == o2) + " " + o1.equals(o2));
答案 1 :(得分:1)
K139是正确的,但让我解释原因。乍一看这很棘手,但这一切都归结为操作员优先。
请参阅Java API Operators Tutorial
添加运算符+
出现在相等==
所以System.out.println(o1==o2 + " " + o1.equals(o2));
更明确地通过了辩论:
o1 == (o2 + " " + o1.equals(o2))
即检查o1
是否等同于"java.lang.Object@123a439b false"
之类的字符串,结果为false
,您将其视为唯一输出。
在第一个等效检查周围添加括号会导致操作按照您预期的顺序执行。
System.out.println((o1==o2) + " " + o1.equals(o2));
这会产生:false false