是在堆栈或堆上创建的Integer

本文关键字:创建 Integer 堆栈 | 更新日期: 2023-09-27 18:19:44

我知道所有像int这样的基元类型都是值类型,并且都是在堆栈上创建的,其中as字符串、对象数组等都是引用类型,并且是在堆上创建的。

我的疑虑如下。如果我创建一个整数对象int i=new int();那么既然它是一个对象,那么它是在栈上还是堆上创建的呢?

是在堆栈或堆上创建的Integer

简短回答:实现细节。

长话短说:实施细节-完全提升实施。

它可以在…上创建。。这取决于它是如何创建的。它是一个班的成员吗?它是局部变量吗。。

Eric Lippert说你不应该真的关心它。请在这里阅读。

Int是一种值类型,它几乎总是在堆栈中创建的。

当整数是您实例化的类中的变量时,它不会在堆栈中创建:在这种情况下,实例及其所有成员(包括值类型)都在堆中。

我上面提供的链接比我解释得更好,当然

它可以在堆栈、堆上创建,也可以存储在寄存器中:

在过去,我通常会反驳这个神话,说真正的说法应该是在桌面CLR上的C#的Microsoft实现中,当值是局部变量或临时变量(不是lambda或匿名方法的封闭局部变量),并且方法体不是迭代器块,并且抖动选择不注册值时,值类型存储在堆栈上

int i = new int();等效于int i = 0;,所以不,它在堆栈/堆分配方面没有区别。

请注意,值类型并不总是在堆栈上创建的,有关详细讨论,请参阅此精细博客条目:

  • Eric Lippert:堆栈是一个实现细节,第一部分