为什么我需要实例化一个对象数组两次
本文关键字:两次 数组 一个对象 实例化 为什么 | 更新日期: 2023-09-27 18:03:55
我创建了一个像这样的对象数组。但是要给对象赋值,我必须在数组的每个位置实例化每个对象?我为什么需要这个?
This is My method
StageObject[] StageSplitDate = new StageObject[Stages.Rows.Count];
for (int i = 0; i < Stages.Rows.Count; i++)
{
StageSplitDate[i] = new StageObject();
StageSplitDate[i].StageId = "String Value";
StageSplitDate[i].FromTime = StartTime;
StartTime =StartTime.AddMinutes(Convert.ToDouble(10));
StageSplitDate[i].ToTime = StartTime;
}
return StageSplitDate;
和对象类
public class StageObject
{
public string StageId { get; set; }
public DateTime FromTime { get; set; }
public DateTime ToTime { get; set; }
}
我必须在数组的每个位置实例化每个对象?
没有实例化数组元素两次。在第一行中,您实例化了一个数组StageSplitDate
,其中每个元素都设置为null。默认情况下,每个数组(引用类型)元素初始化为null。要进一步使用它,您还需要实例化数组中的每个对象,否则您将获得空引用异常。
数组(c#编程指南)- MSDN
数值数组元素的默认值设置为0,引用元素的默认值设置为null
(因为问题最初标记为java)
JAVA4.12.5。变量初始值
- 每个类变量、实例变量或数组组件在创建时都用默认值初始化(§15.9,§15.10):
- 对于所有引用类型(第4.3节),默认值为null。
您的数组是StageObject
引用的数组。StageObject
本身还不存在。实际上,数组中的每一项只是"指向"或"引用"一个StageObject
。
在调用new StageObject()
之前,每个数组元素都是null
,这意味着它没有引用任何内容。
想象一个数组是书架的类比。如果你想要一书架的书,买书架只是第一步;然后你需要买每本书并把它放在书架上。这里的思路是一样的:分配数组给你一个空容器,然后你需要创建每个对象并将其放入容器中。
为什么会这样?因为初始值为空的数组通常是您想要的——即使不是这样,除非您的对象只有一个无参数构造函数,否则Java甚至不知道如何构造每个对象。
new StageObject[Stages.Rows.Count]
创建一个新的StageObject
引用数组,其中包含Stages.Rows.Count
null引用。您希望每个元素都指向StageObject
。为此,您需要创建一些StageObject
实例。
StageObject[] StageSplitDate = new StageObject[Stages.Rows.Count];
上面的语句只对初始化为null的StageObject
创建引用数组,而没有实际初始化StageObject
的对象
StageSplitDate[i] = new StageObject();
上面的语句正在创建类型为StageObject
的对象,并将引用赋值给StageSplitDate
元素