值类型:
值类型存储在堆栈中
例如:
1 using System; 2 namespace Wrow 3 { 4 class Test 5 { 6 public static void Main() 7 { 8 int j=20; 9 int j=i; 10 Console.WriteLine(j); 11 return; 12 } 13 } 14 }
输出20
解析:
在内存中创建了一个整形值为20的内存空间,另外也创建了一个和整形i同样大小的内存空间
引用类型:
引用类型存储在托管堆中(引用类型可设置为null,表示它不引用任何对象)
例如:
1 using System; 2 namespace Wrow 3 { 4 class Test 5 { 6 public static void Main() 7 { 8 Vector x,y; 9 x=new Vector(); 10 x.Value=30; 11 y=x; 12 Console.WriteLine(y.Value); 13 y.Value=50; 14 Console.WriteLine(X.Value); 15 return; 16 } 17 } 18 }
解析:
Vector x,y;
=>在内存堆栈中分别为x和y创建了2个内存空间
x=new Vector();
x.Value=30;
=>
在内存托管堆中创建了一个Vector类型的对象空间并且在该空间中创建了一个Int类型,大小为30的成员变量空间
最后内存堆栈中的x地址指向了对象x内存空间上
y=x;
y.Value=50;
=>
因为将指向内存托管堆中对象x的地址复制拷贝到堆栈中的y空间上,此时y也和x一样同时指向内存托管堆中的对象x空间
所以修改对象x中的成员变量Value的值时,x.Value和y.Value都会一样变化(PS:内存堆栈中的x和y只存储指向对象x的地址)