区别: 值类型与引用类型存储位置不一样 在传递值类型与引用类型时,传递的方式不一样;
值类型: int/double/char/float/struct...... 引用类型: class/ string/ 数组 /集合/object/接口
string :因为它的不可变性,再重新赋值的时候会再开一个空间存放值,所以实际上并不会修改原值;
原理:C#中的string类型是引用类型。这意味着它是一个对象,而不是一个简单的值类型。当你创建一个字符串时,它会在堆中分配内存空间,而不是在栈中。这是因为字符串可以是任意长度的,而栈空间是有限的。
当你创建一个字符串时,C#会在堆中分配一块内存空间来存储字符串的值。这个内存空间会被标记为“已分配”,并且会给这个字符串一个唯一的引用地址。当你对字符串进行操作时,这个引用地址会被传递给方法,而不是字符串的实际值。这就是为什么字符串是引用类型的原因。
当你创建一个新的字符串时,C#会在堆中分配一块新的内存空间来存储新的字符串值。原来的字符串值仍然存在于堆中,但是它的引用地址不再被引用,所以这块内存空间会被标记为“未分配”,并且可以被垃圾回收器清理掉。
引用类型在存储时,对象是开辟在栈中,栈中存储的是对应的堆的地址,而值却是存在堆中。