ToString()方法调用会在堆上创建对象吗?含WriteLine执行场景问询
关于ToString()与堆对象创建的问题
1. 调用ToString()方法是否会在堆上创建对象?
不一定,要分类型来看:
- 对于
int、double这类值类型:默认的ToString()实现通常会生成新的字符串对象,而字符串属于引用类型,会在堆上分配内存。不过.NET Core/.NET 5+对0、1这类常见数值做了字符串缓存,调用这类数值的ToString()会返回缓存实例,不会创建新对象。 - 对于引用类型:如果类型重写的
ToString()返回的是缓存好的字符串(比如单例类的固定描述字符串),则不会创建新对象;否则一般会在堆上生成新的字符串对象。
2. 在执行Console.WriteLine()方法的过程中,调用num.ToString()会在堆上创建对象吗?
针对给出的代码示例:
int num = 83424; Console.WriteLine(num.ToString());
这里num的值83424不在.NET默认缓存的常见数值范围内,调用num.ToString()时会在堆上创建一个新的字符串对象,用来存储"83424"这个字符串。
内容的提问来源于stack exchange,提问作者Naydachy
相关产品推荐
相关产品推荐

