C#中Console.WriteLine两种写法输出结果差异的原因咨询
为什么两段Console.WriteLine输出结果差异这么大?
这是个很经典的运算符优先级坑!我来给你拆解清楚:
先看你的测试代码:
var a = "hello"; var b = string.Copy(a); Console.WriteLine($"a == b: {a == b}"); Console.WriteLine("a == b:" + a == b);
第一段输出正常的原因
第一段用了C#的字符串插值语法($""),这个语法会先解析花括号里的表达式a == b,得到布尔值True,再把它嵌入到整个字符串中,最终输出完整的a == b: True,完全符合预期。
第二段只输出False的核心原因
问题出在C#的运算符优先级上:
在C#的运算符优先级规则里,字符串拼接的+运算符优先级,要高于相等比较的==运算符。所以第二段代码的执行顺序根本不是你想的“先拼接前缀和比较结果”,而是:
- 先执行
"a == b:" + a,得到新字符串"a == b:hello" - 再把这个新字符串和变量
b(值为"hello")做相等比较:"a == b:hello" == "hello",结果显然是False - 最后
Console.WriteLine输出的是这个比较的布尔结果,也就是False,自然就看不到你原本想输出的前缀了。
如何修复第二段代码
如果想要第二段和第一段输出一致,你需要给a == b加上括号,强制让比较运算先执行,再做字符串拼接:
Console.WriteLine("a == b:" + (a == b));
这样修改后,会先计算a == b得到True,再和前缀拼接,最终输出a == b:True。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

