为什么这个打印只是“假”而不是“假假”?

时间:2018-05-29 15:29:08

标签: java equals

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==o2o1.equals(o2)都是false,但为什么只打印"false"而不是"false false"

2 个答案:

答案 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