值类型:
基于值类型的变量直接包含值,将一个值变量赋给另一个变量时,将复制包含的值。例如
int a = 2;
int b = a;
a = 3;
Console.WriteLine(b);
int b = a;
a = 3;
Console.WriteLine(b);
输出结果为:2,该程序的具体实现为:在线程堆栈中先为a开辟32位的空间存储2,再在线程堆栈中开辟32位的空间,遇见“=”时为b传值,值为a的值即2,当改变a的值时,存储a的内存空间变化,值变为3,但b的内存空间并没有随着变化,所以b仍为2
引用类型:
引用类型的变量又称为对象,,它引用的是变量的地址例如:
int[] array = new[] { 1,2};
int[] array1 = array;
array[0] = 3;
for (int i = 0; i < array1.Length ; i++)
{
Console.WriteLine(array1[i]);
}
int[] array1 = array;
array[0] = 3;
for (int i = 0; i < array1.Length ; i++)
{
Console.WriteLine(array1[i]);
}
数组为引用类型,具体实现为:当程序遇见 int[] array 时把int[] array 放在线程堆栈中并在托管堆中开辟一段空间存储{ 1,2},当遇见int[] array1也 把int[] array1 放在线程堆栈中,并使托管堆中存储{ 1,2}的空间指向int[] array1 因此当 array[0] = 3时,存储{ 1,2}的空间变为{ 3,2}所以指向int[] array1 的空间也为{ 3,2}。
总之一句话:值类型赋的是值,引用类型赋的是地址
转载于:https://blog.51cto.com/lixinya/351237