这是C#中的一个简单脚本,它输出两个不同的东西。问题不在于比较对象 - 不要误入歧途。这是关于使用Console.WriteLine
发送输出。
var a = "hello";
var b = string.Copy(a);
Console.WriteLine($"a == b: {a == b}");
Console.WriteLine("a == b:" + a == b);
第一个Console.WriteLine
输出a == b: True
,第二个输出False
,这意味着忽略引号中的部分("a == b:"
)。
我正在使用VS 2015和C#4.5.2 - 使用4.6测试结果仍然相同。
对这种行为的任何想法都非常感激。
答案 0 :(得分:8)
==
运算符的优先级低于+
运算符。这意味着第一个"a == b:"
与+
连接在一起(a
),然后将结果与==
与b
进行比较,返回False
请参阅:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/
添加运算符高于相等运算符,因此它们具有更高的优先级。
您可以使用()
强制它,在以下代码中a == b
首先进行评估:
Console.WriteLine("a == b:" + (a == b));
您的第一个示例是使用字符串插值,其中在调用ToString
之前计算整个表达式,然后将结果与其余表达式连接。
答案 1 :(得分:6)
第二行正在评估:
"a == b:" + a == b
正确返回False。即。
( "a == b:" + a ) == b
因此字符串构建为a == b:hello' and being compared to 'hello' as the
+ operation is done before the
==`
您可以通过在a == b
Console.WriteLine("a == b:" + (a == b));
答案 2 :(得分:0)
你的第二行是'字符串文字+ a' == b,这将是假的。从本质上讲,你正在做
"a == b:hello" == b
总是会返回false。