String 的相等性和不可变性

引用类型是在垃圾回收托管堆上分配的的对象。默认情况下,当我们对引用类型进行相等操作时(C#  ==和!=  操作符),如果引用类型指向内存中的相同对象,则返回true。然而,尽管string数据类型确实是引用类型,但是相等性操作被重定义为比较字符串对象的值,而不是内存中它们引用对象。

string s2="my  string";

s2="new  string";

如图上图所示,当我们重新为s2赋值时底层并不是直接操作s2,而是为它创建一个新值得副本,再将这个新副本赋值给s2 。

所以,如果string被滥用,就会导致低效,并导致代码膨胀,特别是进行字符拼接操作时。如果需要表示在应用程序中用到的基本字符数据,使用string是个很好的选择。但是如果要构建使用大量文本的应用,使用string就会产生大量不必要的字符串副本。这样如果应用需要使用大量文本该怎么办?这是需要选择System.Text.StringBulider类,StringBuilder类与string类有很多相似的方法和属性,但是不同的是StringBuilder类的一些方法可以操作其本身,而不是新建副本。


string的不可变性:

            string s = "a";
            s.Insert(0, "b");
            System.Console.WriteLine("s:"+s);
            string s2 = s.Insert(0, "b");
            System.Console.WriteLine("s:" + s);
            System.Console.WriteLine("s2:"+s2);

输出结果:



从上面代码中可以看出,string的Insert方法并不对变量s进行操作,而是将处理之后的字符串作为一个返回值。所以s本身的值不变。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值