为什么string是引用类型

在c#中分为值类型和引用类型,值类型为int ,float ,bool ,char ,struct等简单数据类型,引用类型有stirng,class。

然而string的身为引用类型却表现得与值类型十分相同。为什么string为引用类型呢?首先明白string指向常量空间的地址。

如果我们有一个字符串 string a="abcde";

我们用a给其他字符串赋值:string b=a,c=a,d=a;

那么这样子我们就得到了4个一模一样的字符串"abcde"。a  b  c  d都是指向同一块地址。

可是既然string是引用类型,那么a ,b ,c ,d 代表的都是同一个字符串,如果我改变其中一个字符串a="1234",另外的三个由于指向的都是同一个字符串,其他三个也应该是"1234"。但是事实上并不是这样子的,另外三个的值依旧是”abcde“。这样子的话string还能叫做引用类型吗?

答案是string当然是个引用类型。

由于其他三个字符串我们使用 a 去赋值,在a ,b , c , d ,指向的都是同一块常量地址。但是常量是不能直接被改变的,因此我们不能通过直接修改字符串常量来达到我们修改字符串的目的,必须是开辟另一个常量空间存放新的字符常量,因此,当使用 a="1234"时,a指向的地址该变了,但是b,c,d还是指向原来的同一块空间。这种情况产生的现象使得string和值类型更改值时产生的现象一模一样(如:int k=10;int t=k;t=20;)

引用是一种别名,本质上是指向同一块地址,底层实现是通过指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值