为什么这个打印只有 "false" 而不是 "false false"?
Why is this print only "false" instead of "false false"?
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"
?
这是因为==用作比较两个部分的表达式。
它比较 o1 与整个 o2 + " " + o1.equals(o2) 字符串.
我添加了空格以便更好地查看它。
System.out.println(o1 == o2 + " " + o1.equals(o2));
如果你想要双假。这是修改后的 println 语句。
System.out.println((o1 == o2) + " " + o1.equals(o2));
K139 是正确的,但让我解释一下原因。乍一看这很棘手,但这全都归结为运算符优先级。
加法运算符+
先于相等==
所以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
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"
?
这是因为==用作比较两个部分的表达式。
它比较 o1 与整个 o2 + " " + o1.equals(o2) 字符串.
我添加了空格以便更好地查看它。
System.out.println(o1 == o2 + " " + o1.equals(o2));
如果你想要双假。这是修改后的 println 语句。
System.out.println((o1 == o2) + " " + o1.equals(o2));
K139 是正确的,但让我解释一下原因。乍一看这很棘手,但这全都归结为运算符优先级。
加法运算符+
先于相等==
所以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