在 C# 中,数据类型可以分为值类型(Value Types)和引用类型(Reference Types)。这两种类型在内存中的存储方式和行为有所不同:
// 值类型示例
int x = 10; // 声明一个 int 类型的值类型变量
int y = x; // 创建 x 的副本赋值给 y
x = 20; // 修改 x 的值,y 的值不受影响
Console.WriteLine(x); // 输出 20
Console.WriteLine(y); // 输出 10
// 引用类型示例
int[] array1 = { 1, 2, 3 }; // 声明一个 int 数组并初始化
int[] array2 = array1; // 复制 array1 的引用给 array2
array1[0] = 10; // 修改 array1 中的值,array2 中的值也会改变
Console.WriteLine(array1[0]); // 输出 10
Console.WriteLine(array2[0]); // 输出 10
// 引用类型示例:字符串
string str1 = "Hello";
string str2 = str1; // 复制 str1 的引用给 str2
str1 = "World"; // 修改 str1 的值,str2 的值不受影响
Console.WriteLine(str1); // 输出 "World"
Console.WriteLine(str2); // 输出 "Hello"
需要注意的是,虽然 string 是引用类型,但它在使用上更接近于值类型。这是因为字符串具有不可变性,即字符串对象的值在创建后不可更改。因此,当对字符串进行修改时,实际上是创建了一个新的字符串对象,而原始字符串对象保持不变。