int[] myIntegers;
myIntegers = new int[100];
在上面的代码中,新的int100是否在堆上生成数组?从我通过c#在CLR上读到的内容来看,答案是肯定的。但我不能理解的是,数组中的实际int会发生什么。因为它们是值类型,我猜它们必须被装箱,例如,我可以将myIntegers传递给程序的其他部分,如果它们一直留在堆栈上,它会使堆栈变得混乱。还是我错了?我猜它们只是被装箱了,只要数组存在,它们就会一直存在于堆上。
发布于 2017-12-06 09:00:11
这些是@P爸爸描述上述答案的插图
并且我用我的风格说明了相应的内容。
发布于 2009-07-11 14:38:03
在堆上分配一个整数数组,不多也不少。对分配整数的节的开头的myIntegers引用。该引用位于堆栈上。
如果你有一个引用类型对象的数组,比如对象类型,位于堆栈上的myObjects[]会引用引用对象本身的一串值。
总而言之,如果您将myIntegers传递给一些函数,那么您只传递了对分配实际整数串的位置的引用。
发布于 2009-07-11 15:07:46
在您的示例代码中没有装箱。
值类型可以驻留在堆中,就像它们在int数组中一样。数组是在堆上分配的,它存储整数,而整数恰好是值类型。数组的内容被初始化为默认值(Int),该值恰好为零。
考虑一个包含值类型的类:
class HasAnInt
{
int i;
}
HasAnInt h = new HasAnInt();
变量h指的是位于堆上的HasAnInt实例。它只是碰巧包含一个值类型。这完全没问题,'i‘只是碰巧住在堆上,因为它包含在一个类中。在这个例子中也没有装箱。
https://stackoverflow.com/questions/1113819
复制相似问题