gpt4 book ai didi

c# - 是因为 CLR 或 GetHashCode() 方法的字符串池吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:08:00 28 4
gpt4 key购买 nike

是因为 CLR 的字符串池还是两个字符串的 GetHashCode() 方法返回相同的值?

string s1 = "xyz";
string s2 = "xyz";
Console.WriteLine(" s1 reference equals s2 : {0}", object.ReferenceEquals(s1, s2));

控制台写入:"s1 reference equals s2 : True"

我相信,这不是因为 GetHashCode() 为两个字符串实例返回相同的值。因为,我使用自定义对象进行了测试并覆盖了 GetHasCode() 方法以每次都返回一个常量。此对象的两个单独实例在引用中不相等。

请告诉我幕后发生的事情。

谢谢123开发人员

最佳答案

听起来像string interning - 一种只存储一个字符串副本的方法。它要求字符串是您正在处理的语言中的不可变类型,而 .Net 满足这一点并使用字符串实习。

在字符串实习中,字符串“xyz”存储在实习生池中,每当您在内部使用“xyz”时,它都会引用池中的条目。这可以通过只存储一次字符串来节省空间。因此,“xyz”==“xyz”的比较将被解释为 [指向 34576 的指针] == [指向 34576 的指针],这是正确的。

关于c# - 是因为 CLR 或 GetHashCode() 方法的字符串池吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702634/

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