我的课程如下:
public class A
{
int i;
}
当我创建类的对象时如下:
A obj=new A();
我可以理解对象是在Heap中分配的。现在这个类得到了一个整数变量。在哪里分配成员变量“i”(在堆栈或堆中)?
答案 0 :(得分:1)
i
是一个字段,因此它是实例本身的一部分。由于实例在堆上,并且由i
组成...因此i
在堆上。
这对struct
类型来说更有趣,因为实例(值)可以在任何地方,因此i
可以在任何地方。你只能说“在实例中”。
答案 1 :(得分:1)
在哪里分配成员变量“i”(在堆栈或堆中)?
它在堆上 - 它是对象内存的一部分。 (如果变量不最终作为对象数据的一部分,您希望对象的数据包含哪些内容?)
当然,正如Eric Lippert所指出的,堆栈是一个实现细节(part one; [part two][2]
)。通常你不应该太担心它。实际上,已经有越来越多的情况开始在堆上分配局部变量:
我没有看到很多相反的证据,尽管未来的CLR可能会使用转义分析来证明某个特定的对象永远不会在堆上分配 ,而是在堆栈上分配它。 (我相信一些JVM会这样做。)
答案 2 :(得分:0)
所有类成员都将继续进行内存分配。方法中的所有变量(局部变量)都在堆栈上分配。