🧠 一次搞懂 C# 值类型与引用类型的核心区别!
在 C# 开发中,我们经常听到“值类型”和“引用类型”这两个概念。
但很多人写了多年代码,却依然傻傻分不清两者的区别。
今天,用最简单的例子,让你一次搞懂!
💡 一、什么是值类型?
值类型(Value Type) 直接存储在 栈(Stack) 中,
变量保存的是 实际的数据。
当你复制一个值类型变量时,系统会 再创建一份独立副本,互不影响。
int a = 10;
int b = a;
b = 20;
Console.WriteLine(a); // 输出 10修改 b 后,a 仍然是 10。
因为两者在内存中已经是不同的两个值。
常见的值类型包括:
int, double, bool, struct, enum 等。
🧩 二、什么是引用类型?
引用类型(Reference Type) 存储在 堆(Heap) 中, 变量保存的是 对象的引用地址,而不是实际数据。
var arr1 = new int[] { 1, 2, 3 };
var arr2 = arr1;
arr2[0] = 99;
Console.WriteLine(arr1[0]); // 输出 99为什么 arr1 也被改了?
因为 arr1 和 arr2 实际上指向的是同一个内存地址。
常见的引用类型包括:
class, array, string, interface 等。
⚙️ 三、string 是个“例外”
虽然 string 是引用类型,
但它有一个特殊的特性:不可变(immutable)。
也就是说,每次修改字符串时, 系统都会重新创建一个新的字符串对象。
string s1 = "Hello";
string s2 = s1;
s2 = "World";
Console.WriteLine(s1); // 输出 Hellostring 在内存中的处理方式,
让它既具备引用类型的特征,又避免了意外修改的问题。
🔍 四、对比总结
| 对比项 | 值类型 | 引用类型 |
|---|---|---|
| 存储位置 | 栈(Stack) | 堆(Heap) |
| 保存内容 | 实际数据 | 引用地址 |
| 复制行为 | 拷贝副本 | 拷贝引用 |
| 是否独立 | 相互独立 | 指向同一对象 |
| 示例 | int、struct、enum | class、array、string |
🚀 五、写在最后
理解值类型与引用类型的区别, 不仅能帮你写出更高效的代码, 还能避免许多内存与参数传递的坑。
💙 程序员的成长,从理解基础开始。
✍️ 作者:李勇 / 山东有客赞信息技术有限公司 专注 .NET 架构与企业级系统设计 📘 更多技术文章请访问:MUZINET 技术专栏 👉 关注我,获取全部在线文档。
最后更新于