C#面试题更新 2026-08-05

请解释C#中字符串对象在创建后内容能否被修改,以及这种不可变性背后的设计原因是什么?

技术原理C#

考察说明

考查对C#字符串不可变性的理解及其设计动机。

回答思路

  1. 【回答框架 1】在C#中,字符串是不可变的。一旦创建了一个string对象,其字符序列就不能被改变。任何看似修改字符串的操作,如使用赋值运算符或调用方法,实际上都是创建了一个新的字符串对象。
  2. 【回答框架 2】这种不可变性带来几个好处:首先,它使得字符串可以安全地被多个线程共享,不需要额外的同步;其次,它允许字符串驻留(string interning)机制,相同内容的字符串可以共享同一内存,提高内存使用效率;最后,它提高了安全性,防止了字符串内容被意外修改。
  3. 【回答框架 3】同时,不可变性也意味着频繁的字符串修改会创建大量临时对象,增加GC压力。因此,在需要大量修改字符串的场景下,应使用可变类型,如StringBuilder,以提高性能。
  4. 【关键点 1】string对象在创建后内容不可修改。
  5. 【关键点 2】任何修改操作都会创建新对象,原对象保持不变。
  6. 【关键点 3】不可变性带来线程安全、内存优化和安全性的好处。
  7. 【关键点 4】频繁修改字符串时应使用StringBuilder。
  8. 【易错点 1】误以为字符串赋值或拼接修改了原对象。
  9. 【易错点 2】忽略字符串驻留机制带来的内存共享行为。
  10. 【易错点 3】在需要大量修改字符串时仍使用string,导致性能问题。