积极答复者
请教C#中String问题!

问题
答案
-
我在这里说下上面那两句代码是怎么执行的:
1)创建一个System.String类型的对象,并初始化文本"h",此时.NET运行库为该字符串分配足够的内存来保存这个文本,再设置变量b,表示这个字符串实例;
2).NET运行库再创建一个新的字符串实例,给它分配内存保存从b的地址复制过来的"h"和"ello"的合并字符串。之后更新存储在b中的地址,使b正确的指向新的字符串对象。
3)至此,原有的地址保存的"h"并未发生改变,依然存在,只是没有任何的变量引用它了。下次垃圾回收的时候就会被删除。
我在这里也不是很明白b继续保存"h"的意思,估计是初始时b引用的地址继续保存"h"。
- 已标记为答案 刘伟伟 2010年4月23日 12:19
全部回复
-
我在这里说下上面那两句代码是怎么执行的:
1)创建一个System.String类型的对象,并初始化文本"h",此时.NET运行库为该字符串分配足够的内存来保存这个文本,再设置变量b,表示这个字符串实例;
2).NET运行库再创建一个新的字符串实例,给它分配内存保存从b的地址复制过来的"h"和"ello"的合并字符串。之后更新存储在b中的地址,使b正确的指向新的字符串对象。
3)至此,原有的地址保存的"h"并未发生改变,依然存在,只是没有任何的变量引用它了。下次垃圾回收的时候就会被删除。
我在这里也不是很明白b继续保存"h"的意思,估计是初始时b引用的地址继续保存"h"。
- 已标记为答案 刘伟伟 2010年4月23日 12:19
-
你好!
应该是翻译的问题,英文原文是这样的:
For example, when you write this code, the compiler actually creates a new string object to hold the new sequence of characters, and that new object is assigned to b. The string "h" is then eligible for garbage collection.
例如,编写这段代码的时候,编译器实际上创建了一个新的string对象来保存新的字符序列,并把这个新的对象赋给b,然后字符串“h"符合垃圾回收的条件!
周雪峰 -
你好!
应该是翻译的问题,英文原文是这样的:
For example, when you write this code, the compiler actually creates a new string object to hold the new sequence of characters, and that new object is assigned to b. The string "h" is then eligible for garbage collection.
例如,编写这段代码的时候,编译器实际上创建了一个新的string对象来保存新的字符序列,并把这个新的对象赋给b,然后字符串“h"符合垃圾回收的条件!
周雪峰
嗯,看到英文就知道是翻译错了,呵呵,昨天倒没查msdn。