我实例化一个这样的数组:
int array[] = new int[4];
这四个成员的默认值是什么?是否为空、0 或不存在?
它是 0。它不能为 null,因为 null 不是有效值int
。
从 C# 5 规范的第 7.6.10.4 节:
新数组实例的所有元素都被初始化为其默认值(第 5.2 节)。
从第 5.2 节开始:
变量的默认值取决于变量的类型,并确定如下:
- 对于值类型的变量,默认值与值类型的默认构造函数计算的值相同(第 4.1.2 节)。
- 对于引用类型的变量,默认值为 null。
初始化为默认值通常是通过让内存管理器或垃圾收集器在分配内存之前将内存初始化为所有位为零来完成的。因此,使用全位为零来表示空引用很方便。
(作为实现细节,第一个要点有一些技巧。虽然 C# 本身不允许您为值类型声明无参数构造函数,但您可以在 IL 中为值类型创建自己的无参数构造函数。我不相信这些构造函数在数组初始化中调用,但它们将在 C#中的表达式中调用new X()
。不过,它确实超出了 C# 规范的范围。)
类型为 的自动初始化变量(T
例如数组元素或实例字段)的默认值与 的值相同default(T)
。对于引用类型和指针类型,它是 null。对于数字类型,它是该类型的零。对于 bool,它是错误的。对于结构类型,结构值的所有字段都初始化为默认值。
数值数组元素的默认值设置为零,参考元素设置为空。
整数不能NULL
。它们将具有值“0”。即使您尝试分配NULL
给int
来自代码,您也无法做到。