private Object object1;
object1是否调用了Object的默认构造函数,即使它没有使用= new Object();
?
如果没有,则对象1为NULL,直到用new
初始化?
答案 0 :(得分:4)
不,该字段声明只是声明了一个字段。它的默认值为null
。
来自C#5规范的第5.2节:
以下类别的变量会自动初始化为默认值:
- 静态变量。
- 类实例的实例变量。
- 数组元素。
变量的默认值取决于变量的类型,并确定如下:
- 对于value-type的变量,默认值与value-type的默认构造函数(第4.1.2节)计算的值相同。
- 对于reference-type的变量,默认值为null。
初始化为默认值通常通过让内存管理器或垃圾收集器在分配使用之前将内存初始化为所有位为零来完成。因此,使用all-bits-zero表示空引用很方便。
如果您希望以null以外的值开始,则需要明确初始化它:
private Object object1 = new Object();
答案 1 :(得分:1)
在调用类的构造函数之前,该字段为null
,直到被赋予不同的值。
然而,在加载类型时可能会调用静态构造函数。
答案 2 :(得分:0)
null是任何引用类型的默认值
您创建了对象句柄,您可以为此句柄指定任何对象引用。