是“字符串s”;编译成“string s = new String(..);”?

时间:2012-03-11 10:11:30

标签: c# string

String不是值类型,但我们仍然像它的值类型一样使用它。那么,string s;编译为string s = new String(..);吗?

2 个答案:

答案 0 :(得分:2)

定义string s;时,您只定义一个引用,该引用当前根本不指向任何内容。由于string是引用类型,编译器不会生成string s = new String(..);。您可以理解它,因为string s = null;将是编译结果。

对于值类型,例如int,情况不同。例如,当您定义int i;时,它将编译为int i = 0;,其中0是默认值。

答案 1 :(得分:0)

我弄清楚了我的困惑:在阅读this帖后,我明白堆栈将保留对初始化后将在堆中分配的s的引用。