为何C#中Console.WriteLine拼接字符串后判等输出False而非预期值
现象原因
这一问题的核心是C#的运算符优先级规则:+(字符串拼接运算符)的优先级高于==(相等比较运算符),代码执行时会优先运行优先级更高的运算符,和你预想的执行顺序不符。
第一段代码的完整执行逻辑
你写的表达式"Output" + v1 == v2不会先执行v1 == v2的判断,而是按照优先级顺序执行如下步骤:
- 优先执行
+运算:把字符串"Output"和v1的值"Hallo"拼接,得到新字符串"OutputHallo" - 再执行
==比较运算:把第一步得到的"OutputHallo"和v2的值"Hallo"做相等判断,两个字符串内容不一致,返回布尔值False - 最终把
False传入Console.WriteLine输出,就得到了你看到的运行结果。
符合预期的调整方案
如果要先做v1和v2的相等判断,需要用括号手动调整运算优先级,修改为:
Console.WriteLine("Output" + (v1 == v2));
修改后代码会先执行括号内的v1 == v2得到true,再和"Output"拼接,最终输出OutputTrue,和第二段代码的执行效果一致。第二段代码没有优先级冲突,只有+拼接运算,所以直接按顺序执行拼接,输出结果符合你的预期。
内容的提问来源于stack exchange,提问作者David Mason
相关产品推荐
相关产品推荐

