在很多网上资料中看到, 关于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 的值发生改变, 系统就重新给它分配了一个新的内存空间,确保资源的最大利用率
,
|
请发表评论