public class MyClass
{
int i = 0;
string str = "here";
MyStruct mystruct;
B b;
ArrayList myList = new ArrayList(10);
public MyClass()
{
}
....
}
public struct MyStruct
{
public int i;
public float f;
}
public class B
{
...
}
想要了解如何在后台创建类的实例。当这句话
MyClass myClass = new MyClass();
评估。背景会发生什么?我的以下陈述是否正确(对于32位OS机器)?
myClass
; int i
; string str
的引用; str
的实际值存储在其他位置(其中?)MyStruct mystruct
的值(因为MyStruct是8个字节); B b
对象的引用; b对象的内存将在实例化时在其他地方分配; ArrayList myList
的引用; ArrayList myList
的实际内存空间在其他位置分配,并在此处引用为myList
; 答案 0 :(得分:2)
你有基本的想法。除了您所包含的内容之外,其实际细节是特定于实现的。但是,有几个要点:
3)实际字符串通常存储在自己的内存空间中,就像任何其他类一样。但是,由于在这种情况下你使用的是字符串文字,它很可能是在字符串实习池中,我相信它存储在大对象堆中。有关字符串实习的详细信息,请参阅String.Intern。 (如果您动态分配了字符串,而不是使用文字,则字符串将存储在应用程序的普通托管堆中。)
答案 1 :(得分:1)
就是这样。
字符串存储在字符串表中,而不是存储在堆中的自由浮动对象中。重要的是要注意,实例化该字符串的只有一个实例,而不管实例化MyClass
的实例数。
答案 2 :(得分:1)