Java字符串运算符优先级:==与+的优先级问题及代码输出疑惑
问题解析:为什么代码仅输出
false而非预期内容? 先把你的代码贴出来方便分析:
String one = "length: 10"; String two = "length: " + one.length(); System.out.println("Both are equal:" + one == two);
这是个典型的运算符优先级陷阱,我来给你拆解清楚:
核心原因:运算符优先级搞反了执行顺序
Java里,字符串连接运算符+的优先级高于相等判断运算符==。所以你写的表达式并不是先判断one == two再拼接字符串,而是会按以下顺序执行:
- 先执行字符串拼接:
"Both are equal:" + one,得到新字符串"Both are equal:length: 10" - 再把这个拼接后的字符串和
two用==比较——这两个是完全不同的对象,结果自然是false - 最后输出这个布尔值
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
相关产品推荐
相关产品推荐

