Skip to Content
MUZINET-NOTE 4.0 is released 🎉
技术知识库C#值类型与引用类型

🧠 一次搞懂 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 也被改了? 因为 arr1arr2 实际上指向的是同一个内存地址。

常见的引用类型包括: class, array, string, interface 等。


⚙️ 三、string 是个“例外”

虽然 string 是引用类型, 但它有一个特殊的特性:不可变(immutable)

也就是说,每次修改字符串时, 系统都会重新创建一个新的字符串对象。

string s1 = "Hello"; string s2 = s1; s2 = "World"; Console.WriteLine(s1); // 输出 Hello

string 在内存中的处理方式, 让它既具备引用类型的特征,又避免了意外修改的问题。


🔍 四、对比总结

对比项值类型引用类型
存储位置栈(Stack)堆(Heap)
保存内容实际数据引用地址
复制行为拷贝副本拷贝引用
是否独立相互独立指向同一对象
示例int、struct、enumclass、array、string

🚀 五、写在最后

理解值类型与引用类型的区别, 不仅能帮你写出更高效的代码, 还能避免许多内存与参数传递的坑。

💙 程序员的成长,从理解基础开始。


✍️ 作者:李勇 / 山东有客赞信息技术有限公司 专注 .NET 架构与企业级系统设计 📘 更多技术文章请访问:MUZINET 技术专栏 👉 关注我,获取全部在线文档。

最后更新于