为什么string是引用类型

  • Post author:
  • Post category:其他


在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;)

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



版权声明:本文为kenniszy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。