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

Java字符串运算符优先级:==与+的优先级问题及代码输出疑惑

问题解析:为什么代码仅输出false而非预期内容?

先把你的代码贴出来方便分析:

String one = "length: 10"; 
String two = "length: " + one.length(); 
System.out.println("Both are equal:" + one == two);

这是个典型的运算符优先级陷阱,我来给你拆解清楚:

核心原因:运算符优先级搞反了执行顺序

Java里,字符串连接运算符+的优先级高于相等判断运算符==。所以你写的表达式并不是先判断one == two再拼接字符串,而是会按以下顺序执行:

  1. 先执行字符串拼接:"Both are equal:" + one,得到新字符串"Both are equal:length: 10"
  2. 再把这个拼接后的字符串和two用==比较——这两个是完全不同的对象,结果自然是false
  3. 最后输出这个布尔值false,完全跳过了你想要的拼接逻辑

如何修复?

给比较部分加上括号,强制改变执行顺序,让one == two先执行,再把结果拼接到字符串里:

System.out.println("Both are equal:" + (one == two));

这样就能输出你预期的Both are equal: false了。

额外提醒:字符串比较别用==

这里还要补充一个知识点:==比较的是字符串对象的引用地址,不是内容。虽然one和two的内容都是"length: 10",但:

  • one是字符串字面量,会存在字符串常量池中
  • two是通过动态拼接生成的,会在堆内存中创建新对象
    所以one == two会返回false。如果要判断字符串内容是否相等,应该用equals()方法:
System.out.println("Both are equal:" + one.equals(two));

这时候输出的就是Both are equal: true,这才是判断字符串内容相等的正确姿势。

内容的提问来源于stack exchange,提问作者Saurav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:23:48