String不是值类型,但我们仍然像它的值类型一样使用它。那么,string s;
编译为string s = new String(..);
吗?
答案 0 :(得分:2)
定义string s;
时,您只定义一个引用,该引用当前根本不指向任何内容。由于string是引用类型,编译器不会生成string s = new String(..);
。您可以理解它,因为string s = null;
将是编译结果。
对于值类型,例如int,情况不同。例如,当您定义int i;
时,它将编译为int i = 0;
,其中0是默认值。
答案 1 :(得分:0)
我弄清楚了我的困惑:在阅读this帖后,我明白堆栈将保留对初始化后将在堆中分配的s
的引用。