数组中成员的默认值是什么?
本文关键字:是什么 默认值 成员 数组 | 更新日期: 2023-09-27 18:03:13
我像这样实例化一个数组:
int array[] = new int[4];
这四个成员的默认值是什么?它是null, 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)
相同。对于引用类型和指针类型,它是空的。对于数字类型,它是该类型的零。对于bool,它为false。对于结构类型,它是将其所有字段初始化为默认值的结构值。
From Arrays (c# Programming Guide):
数值数组元素的默认值设置为0,引用元素的默认值设置为null。
整数不能为NULL
。它们的值为'0'。即使您尝试从代码中将NULL
分配给int
,您也无法做到这一点。