gpt4 book ai didi

c# - 由于字符串是不可变的,具有相同字符串值的变量是否指向同一个字符串对象?

转载 作者:可可西里 更新时间:2023-11-01 03:07:24 25 4
gpt4 key购买 nike

一)

        string s  = "value";
string s1 = "value";

s 和 s1 引用变量是否指向同一个字符串对象(我假设这是因为字符串是不可变的)?

b) 我意识到相等运算符(==、> 等)已被重新定义以比较字符串对象的值,但在使用静态方法 Object.Equals() 和 Object.ReferenceEquals() 比较两个字符串时也是如此?

谢谢

最佳答案

不,并非所有具有相同值的字符串都是相同的对象引用。

编译器生成的字符串都将是 Interned 并且是相同的引用。运行时生成的字符串在默认情况下不会被保留,并且会是不同的引用。

var s1 = "abc";
var s2 = "abc";
var s3 = String.Join("", new[] {"a", "b", "c"});
var s4 = string.Intern(s3);
Console.WriteLine(ReferenceEquals(s1, s2)); // Returns True
Console.WriteLine(ReferenceEquals(s1, s3)); // Returns False
Console.WriteLine(s1 == s3); // Returns True
Console.WriteLine(ReferenceEquals(s1, s4)); // Returns True

请注意上面的行,您可以使用 String.Intern(string) 强制驻留字符串,然后允许您使用对象相等性而不是字符串相等性进行某些检查,这要快得多.一个非常常用的示例是在生成的 XML 序列化程序代码和名称表中。

关于c# - 由于字符串是不可变的,具有相同字符串值的变量是否指向同一个字符串对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2231840/

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