值类型和引用类型的内存空间操作理解

值类型:

值类型存储在堆栈中

例如:

 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的地址)

 

转载于:https://www.cnblogs.com/weile0769/p/6706901.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值