我正在使用文字字符串初始化string
数组,如下所示:
public static void Main()
{
string[] values = new string[] { "Cat", "Dog", "Mouse", "Rat" };
}
所以我们在Stack和Heap上有以下结构:
OnStack:变量values
,保存对堆上字符串数组的引用。
OnHeap:堆栈上values
引用的字符串数组
但是堆上数组的每个元素的内容是什么?
- 实际字符串文字?
- 指向实习池中字符串文字的引用?
醇>
修改:该问题被指向与this question重复。但我的情况与
不同答案 0 :(得分:2)
在这种特殊情况下,考虑到Microsoft .NET CLR(这对于class Student implements java.lang.Comparable<Student>{
// fields
private String name;
private int age;
//Constructor
public Student(String name, int age){
this.name = name;
this.age = age;
}
//Override compare
public int compareTo(Student otherStudent){
if(this.age == otherStudent.age){
return 0;
} else if(this.age < otherStudent.age){
return -1;
} else{
return 1;
}
}
//Override toString
public String toString(){
return this.name + " " + this.age;
}
}
的位置很重要,如果在堆栈或堆中),您将有5个对象的5个引用。
准确地说,你有一个values
s(1个对象)数组,它是对string
(另外4个对象)的引用数组。
五个参考文献是:
string
(在这种情况下在堆栈中)values
s(包含在堆上,string
数组中)五个对象是:
string[]
数组
string[]
个对象,但它们仍然是完全成熟的string
个,唯一的区别是GC不会释放它们(除非他们object
已卸下)所以它是
指向实习池中的字符串文字的引用?
答案 1 :(得分:2)
与创建时完全相同:
class MyArray
{
string first;
string second;
string third;
... more strings
}
并创建它的实例:
class MyArray instance = new MyArray();
这将导致MyArray实例的内存分配以及堆上相关字段的数量。它还创建指向此对象的引用以及对所有相关字段的引用。与数组相同,只是您通过访问数组索引器来使用对字段的引用,而不是直接调用instance.first