请帮助理解这种行为。当我使用它时:
bool a1 = (object)("string" + 1) == ("string" + 1);
结果是false
但是当我用这个的时候
bool a2 = (object)("string" + "1") == ("string" + "1");
结果是true
那么,为什么 a1 != a2
?
最佳答案
转换为 object
会强制进行引用相等性比较。
在第一种情况下,在运行时会生成两个不同的 string
对象。由于它们是不同的实例,因此结果为假。
在第二种情况下,编译器注意到 "string"+ "1"
总是 "string1"
并保留字符串并在两个地方。由于是同一个字符串引用,所以结果为真。
关于编译时的 C# 连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17351869/