是在堆栈或堆上创建的Integer
本文关键字:创建 Integer 堆栈 | 更新日期: 2023-09-27 18:19:44
我知道所有像int这样的基元类型都是值类型,并且都是在堆栈上创建的,其中as字符串、对象数组等都是引用类型,并且是在堆上创建的。
我的疑虑如下。如果我创建一个整数对象int i=new int();那么既然它是一个对象,那么它是在栈上还是堆上创建的呢?
简短回答:实现细节。
长话短说:实施细节-完全提升实施。
它可以在…上创建。。这取决于它是如何创建的。它是一个班的成员吗?它是局部变量吗。。
Eric Lippert说你不应该真的关心它。请在这里阅读。
Int是一种值类型,它几乎总是在堆栈中创建的。
当整数是您实例化的类中的变量时,它不会在堆栈中创建:在这种情况下,实例及其所有成员(包括值类型)都在堆中。
我上面提供的链接比我解释得更好,当然
它可以在堆栈、堆上创建,也可以存储在寄存器中:
在过去,我通常会反驳这个神话,说真正的说法应该是在桌面CLR上的C#的Microsoft实现中,当值是局部变量或临时变量(不是lambda或匿名方法的封闭局部变量),并且方法体不是迭代器块,并且抖动选择不注册值时,值类型存储在堆栈上
int i = new int();
等效于int i = 0;
,所以不,它在堆栈/堆分配方面没有区别。
请注意,值类型并不总是在堆栈上创建的,有关详细讨论,请参阅此精细博客条目:
- Eric Lippert:堆栈是一个实现细节,第一部分