C#中new运算符的返回值问题
C#中new运算符的返回值问题
嘿,这个问题问得特别戳痛点,很多刚接触C#的朋友都会有这个困惑,我来给你掰扯明白~
在C#里,当你执行new Person("Leopold", 6)这句代码时,它返回的是指向该Person对象的引用,而不是对象本身。
我给你拆解下new关键字到底干了三件核心事:
- 第一步,在托管堆上划出一块专属内存空间,用来存放这个Person类型的对象;
- 第二步,调用Person类的构造函数,把"Leopold"和6这些参数传进去,完成对象内部成员的初始化;
- 第三步,返回这个对象在托管堆上的内存地址——也就是我们常说的「引用」。
当你把它赋值给person1变量时,person1其实就是存了这个引用。打个生活化的比方:你新建了一栋房子(对象),new操作相当于建好房子后给你一把能开门的钥匙(引用),person1就是这把钥匙。你拿着钥匙才能找到房子、进去操作里面的东西;要是钥匙丢了(没有任何变量引用这个对象),那这栋房子最后就会被垃圾回收器清理掉。
(顺带提一句,如果是值类型比如struct的话,new的行为会有点不一样,但你的例子里Person是类——典型的引用类型,咱们聚焦这个场景就好)
总结一下:new Person("Leopold",6)返回的是指向Person对象的引用,而非对象本身哦。
备注:内容来源于stack exchange,提问作者Totally New
相关产品推荐
相关产品推荐

