首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数组、堆和堆栈以及值类型

数组、堆和堆栈以及值类型
EN

Stack Overflow用户
提问于 2009-07-11 14:30:12
回答 3查看 59.1K关注 0票数 145
代码语言:javascript
复制
int[] myIntegers;
myIntegers = new int[100];

在上面的代码中,新的int100是否在堆上生成数组?从我通过c#在CLR上读到的内容来看,答案是肯定的。但我不能理解的是,数组中的实际int会发生什么。因为它们是值类型,我猜它们必须被装箱,例如,我可以将myIntegers传递给程序的其他部分,如果它们一直留在堆栈上,它会使堆栈变得混乱。还是我错了?我猜它们只是被装箱了,只要数组存在,它们就会一直存在于堆上。

EN

回答 3

Stack Overflow用户

发布于 2017-12-06 09:00:11

这些是@P爸爸描述上述答案的插图

并且我用我的风格说明了相应的内容。

票数 3
EN

Stack Overflow用户

发布于 2009-07-11 14:38:03

在堆上分配一个整数数组,不多也不少。对分配整数的节的开头的myIntegers引用。该引用位于堆栈上。

如果你有一个引用类型对象的数组,比如对象类型,位于堆栈上的myObjects[]会引用引用对象本身的一串值。

总而言之,如果您将myIntegers传递给一些函数,那么您只传递了对分配实际整数串的位置的引用。

票数 1
EN

Stack Overflow用户

发布于 2009-07-11 15:07:46

在您的示例代码中没有装箱。

值类型可以驻留在堆中,就像它们在int数组中一样。数组是在堆上分配的,它存储整数,而整数恰好是值类型。数组的内容被初始化为默认值(Int),该值恰好为零。

考虑一个包含值类型的类:

代码语言:javascript
复制
    class HasAnInt
    {
        int i;
    }

    HasAnInt h = new HasAnInt();

变量h指的是位于堆上的HasAnInt实例。它只是碰巧包含一个值类型。这完全没问题,'i‘只是碰巧住在堆上,因为它包含在一个类中。在这个例子中也没有装箱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1113819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档