Phi*_*l C 3 c# garbage-collection
这是否会导致旧的字符串对象被垃圾收集,或者它仍然是对同一对象的相同引用?
string str = "Hello World!";
str = str.ToUpper();
Run Code Online (Sandbox Code Playgroud)
我理解GC的作用及其不可预测性.
这是否会导致旧的字符串对象被垃圾回收
我们不能说.有两个原因:
或者它仍然是同一个对象的相同引用?
不,您创建了一个新字符串.文件 明确指出(大胆强调我的):
返回转换为大写的此字符串的副本.
和
注意:此方法不会修改当前实例的值.相反,它返回一个新字符串,其中当前实例中的所有字符都转换为大写.
此外,string是不可变的,所以无论如何它都无法改变.
是的,旧的字符串对象将最终被垃圾收集,GC将发现没有更多对该对象的引用.
经过一些研究,似乎字符串文字"Hello World!"是默认实例,所以即使不再提及它们,也不会像@Henk Holterman在评论中提到的那样进行垃圾收集.
这是因为字符串文字是程序集的一部分,并且没有垃圾收集.
所以,我现在将上面的段落改为:
是的,旧的字符串对象将被垃圾收集,如果它不是最终的字符串文字,GC将发现没有更多的对该对象的引用
但是,当 GC这样做时,这是不确定的.