• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

DotNetC#中字符串变量与内存地址的关关系

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 

在很多网上资料中看到, 关于net中的string(字符串)变量的特性说明:
在net中string变量一但被赋值后就不可再对其值进行修改, 这是什么意思呢? 我们又如何去理解当中的"值不可修改"的说法呢?

首先, 我们知道, 当我们定义一个字符串变量并给它赋值时, 系统会分配一个内存空间给该变量用于存放数据, 如下面代码

string a;
string b;
a = "ABCD";
b = a:
a="EEEE"
Console.WriteLine(a);
Console.WriteLine(b);

运行结果是:
a: EEEE
b: ABCD


在这里我们定义了两个字符串变量a和b, 当给a赋值时, 系统就在内存中分配了一个内存地址空间给变量a存放此数据, 而此时a就被指向了. 而当把a的值赋予变量b时, 此时系统不会分配一个新的内存空间给变量b了,而是直接将变量b指向变量a的内存地址,从而节约内存资源,此时b的值就是"ABCD",     接下来改变a的值为”EEEE”, 说到这里一些朋友可能会说, 从输出结果可以看出a的值不就从原来的"ABCD"改成了"EEEE"了吗?不就改了a的值了吗? 呵呵, 其实一开始我也是这样想的, 但细想一下,  上面a和b都是指向了相同的内存地址,那如果a的值被改写了, 那是不是a所指向的内存地址上面的内容就被改变了?这样一来不就连同样是指向于这个内存地址的变量b的值也跟着一起被改变了, 但从上面的代码中我们可以看到, 最后输出的a,b两个变量值是不相同的, 在dotnet这个内存管理模式中, 只就一种可能性就是当我们给变量a  的值发生改变, 系统就给它分配了一个新内存空间,确保资源的最大利用率

,


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
比较C#中几种常见的复制字节数组方法的效率发布时间:2022-07-18
下一篇:
c#base64编码解码发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap