CS2L5——特殊的引用类型string
CS2L5——特殊的引用类型string
回顾值类型与引用类型
- 引用类型:
string
数组 类(未学习)- 值类型:其他类型 结构体(未学习)
值类型 在相互赋值时 把内容拷贝给了对方 它变我不变
引用类型 在相互赋值时 是 让两者指向同一个值 它变我也变为什么有这样的区别
值类型和引用类型 存储在内存的区域是不同的 存储方式是不同的
- 值类型 存储在 栈空间 —— 系统分配,自动回收,小而快
- 引用类型 存储在 堆空间 —— 手动申请和释放,大而慢,引用类型的地址存储在栈空间里,地址指向堆空间里的数据
特殊的引用类型string
因为 string
是引用类型 按理说 应该是“它变我也变”,
但是 C# 做了特别处理,让 string
非常的特殊 它具备 值类型的特征 即“它变我不变”
1 | string str1 = "123"; |
输出:
1 | 123 |
在 string str2 = str1
时,栈空间内还是将 str1
的地址拷贝到 str2
了
但是在 str2 = "321"
时,重新赋值让其在堆空间中重新分配了空间,同时让 str2
指向了新空间
因此 string
具备了值类型的特征
因此 string
虽然方便,但是有一个缺点,就是频繁的改变 string
重新赋值,会产生内存垃圾
因为会有很多的字符串被复制出来占用内存,由此会有优化的替代方案,例如后续的 stringBuilder
查看内存消息
通过断点调试可以在监视窗口可以查看内存消息
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!