我知道像int这样的所有原始类型都是值类型,并且是在堆栈上创建的,其中字符串,对象数组等是引用类型并在堆上创建。
我怀疑如下。 如果我创建一个像整数的对象 int i = new int(); 那么既然它是一个对象,它会在堆栈还是堆上创建?
答案 0 :(得分:4)
简短回答:实施细节。
长答案:实施细节 - 完全实施。
它可以在任何一个上创建..取决于它的创建方式。它是班级成员吗?它是局部变量吗? ..
答案 1 :(得分:4)
Int是一种值类型,它几乎总是在堆栈中创建。
当整数是您实例化的类中的变量时,它不会在堆栈中创建:在这种情况下,实例位于堆及其所有成员中,包括值类型。
我上面提供的链接比我更好地解释了它,当然
答案 2 :(得分:3)
It can be created on the stack, heap or stored in a register:
过去的方式我通常会推翻这个神话,就是说真正的陈述应该是“在桌面CLR上的C#的Microsoft实现中,当值为a时,值类型存储在堆栈中局部变量或临时不是lambda或匿名方法的封闭局部变量,方法体不是迭代器块,抖动选择不注册该值。“
答案 3 :(得分:2)
int i = new int();
相当于int i = 0;
,所以不,它对堆栈/堆分配没有任何影响。
请注意,并非总是在堆栈上创建值类型,请参阅此精细博客条目以进行详细讨论: