首页 > 编程 > C# > 正文

C#字符串对象的不可变性

2023-05-09 18:58:17
字体:
来源:转载
供稿:网友

字符串对象是不可变的:即它们创建之后就无法更改。所有看似修改字符串的 String 方法和 C# 运算符实际上都以新字符串对象的形式返回结果。

在下面的示例中,当连接 s1 和 s2 的内容以形成一个字符串时,不会修改两个原始字符串。+= 运算符会创建一个包含组合内容的新字符串。这个新对象赋给变量 s1,而最初赋给 s1 的对象由于没有其他任何变量包含对它的引用而释放,用于垃圾回收。

            string s1 = "A string is more ";
            string s2 = "than the sum of its chars.";

            // Concatenate s1 and s2. This actually creates a new
            // string object and stores it in s1, releasing the
            // reference to the original object.
            s1 += s2;

            System.Console.WriteLine(s1);
            // Output: A string is more than the sum of its chars. 

由于“修改”字符串实际上是创建新字符串,因此创建对字符串的引用时必须谨慎。

如果创建了对字符串的引用,然后“修改”原始字符串,则该引用指向的仍是原始对象,而不是修改字符串时创建的新对象。下面的代码说明了这种行为:

string s1 = "Hello ";
string s2 = s1;
s1 += "World";

System.Console.WriteLine(s2);
//输出: Hello

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表