C# string 是不可变的,指什么不可变

来源:百度知道 编辑:UC知道 时间:2024/07/07 23:12:07
还有一个问题 ,StringBuilder 是可变的,是指什么可变

String 表示文本,即一系列 Unicode 字符。
字符串是 Unicode 字符的有序集合,用于表示文本。String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。

String 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象。

StringBuilder 类 表示可变字符字符串。无法继承此类。
此类表示值为可变字符序列的类似字符串的对象。之所以说值是可变的,是因为在通过追加、移除、替换或插入字符而创建它后可以对它进行修改。

大多数修改此类的实例的方法都返回对同一实例的引用。由于返回的是对实例的引用,因此可以调用该引用的方法或属性。如果想要编写将连续操作依次连接起来的单个语句,这将很方便。

StringBuilder 的容量是实例在任何给定时间可存储的最大字符数,并且大于或等于实例值的字符串表示形式的长度。容量可通过 Capacity 属性或 EnsureCapacity 方法来增加或减少,但它不能小于 Length 属性的值。

如果在初始化 StringBuilder 的实例时没有指定容量或最大容量,则使用特定于实现的默认值。

不可变的含义在于,一个对象如果生成,便不能再发生改变,可变类则正好相反..对不不可变类的修改往往是以新生成一个该类的对象为手段的.

结合到具体操作,比如字符串链接
String和String的连接接,并不是对其中的某个字符串的修改,而是将两个字符串的内容连接起来,然后在创建一个新的String对象,将连接起来的字符串放入新的对象..

而可变类StringBuilder则是不同,可变类因为本身是可以修改的,因此可以通过直接对StringBuilder对象本身进行修改来达到字符串链接的目的..

也正因为如此,在实现大量的字符串进行连接时,用可变类StringBuilder效率更高,因为并不总需要创建新对象这一额外的开销