请教一个引用类型的问题
string引用类型,例如:
...
string s1 = "test";
string s2 = s1;
...
托管堆中只有一块内存存储"test",只是s1和s2都引用它。此时改变s1的值不会影响s2的值,因为改变时新创建了个对象,新分配了内存。
但是,如果这样:
...
string s1 = "test";
string s2 = "test";
...
此时在托管堆中,它到底是一块内存,还是两块?
C#
引用类型
托管堆
内存分配
string
------解决方案--------------------
你的代码可以通过编译码?msdn 查string 构造函数
其实通过object.ReferenceEquals(str1,str2)
就可以知道了
------解决方案--------------------前几天刚问过一个类似问题
大多数情况下应该是同一块内存,但有例外。但实验中 (object)"1" == "1" 都不一定true
------解决方案--------------------StringBuilder s1 = new StringBuilder("test");
StringBuilder s2 = s1;
s1.Append(" demo");
Console.WriteLine(s2);
再来一个!~明显看到s2结果已经被改变...症结就是因为string是不可变长度的,所以在任何时候当你修改string对象的值的时候,它就会开辟一块新的内存地址!~而StringBuilder 你不重新new一个对象的时候是不会开辟新的地址的!@~
------解决方案--------------------字符串驻留 ,一块内存空间