gpt4 book ai didi

c# - "bool"作为对象 vs "string"作为对象测试相等性

转载 作者:行者123 更新时间:2023-11-30 21:21:33 24 4
gpt4 key购买 nike

我是 C# 的新手,今天我注意到一些有趣的东西,我想我从来没有注意到,或者我可能遗漏了什么。下面以 NUnit 测试为例:

object boolean1 = false;
object booloan2 = false;
Assert.That(boolean1 == booloan2);

这个单元测试失败了,但是这个通过了:

object string1 = "string";
object string2 = "string";
Assert.That(string1 == string2);

对于第一个未能将 boolean1 和 boolean2 视为不同的引用,我本身并不感到惊讶。但是令我不安的是第一个失败了,第二个通过了。我读到(在某个地方的 MSDN 上)对 String 类做了一些魔法来促进这一点。我认为我的问题确实是为什么这种行为没有在 bool 中复制?请注意...如果将 boolean1 和 2 声明为 bool 则没有问题。

造成这些差异的原因是什么,或者为什么要以这种方式实现?是否存在您想要引用 bool 对象的情况,除了它的值?

最佳答案

这是因为字符串实际上指的是同一个实例。字符串被驻留,以便重复使用唯一的字符串。这意味着在您的代码中,这两个字符串变量将引用同一个驻留字符串实例。

您可以在这里阅读更多相关信息:Strings in .NET and C# (乔恩·斯基特)

更新
只是为了完整性;正如 Anthony 指出的那样,字符串 literals 是 interned 的,可以用以下代码显示:

object firstString = "string1";
object secondString = "string1";
Console.WriteLine(firstString == secondString); // prints True

int n = 1;
object firstString = "string" + n.ToString();
object secondString = "string" + n.ToString();
Console.WriteLine(firstString == secondString); // prints False

关于c# - "bool"作为对象 vs "string"作为对象测试相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2655151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com