You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段Java代码仅输出"false"而非"false false"?

问题解析:为什么代码只输出"false"而非"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"?

核心原因是Java的运算符优先级规则:字符串连接运算符+的优先级要高于相等比较运算符==。所以你写的表达式:

o1==o2 + " " + o1.equals(o2)

Java会按照这样的顺序来解析:

  1. 先执行o2 + " ":因为o2是Object对象,和字符串做+运算时会自动调用toString()把对象转成字符串(比如类似java.lang.Object@7852e922这样的格式)
  2. 再把上面的结果和o1.equals(o2)的结果(也就是false)做字符串连接,得到一个长字符串,比如"java.lang.Object@7852e922 false"
  3. 最后用o1和这个长字符串做==比较——一个Object对象和一个String对象显然不是同一个引用,所以结果是false,这就是控制台输出的内容。

要得到你预期的"false false",只需要给两个比较表达式加上括号,强制改变运算顺序:

System.out.println( (o1==o2) + " " + (o1.equals(o2)) );

加上括号后,Java会先分别计算(o1==o2)和(o1.equals(o2))的结果(都是false),再把这两个布尔值转成字符串后用空格连接,最终输出"false false"。

内容的提问来源于stack exchange,提问作者Zoltán Vári

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:56:44