類型被分為兩種:值類型(整數,bool struct char 小數)和引用類型(string 數組 自定義的類,內置的類)。
值類型只需要一段單獨的內存,用于存儲實際的數據,(單獨定義的時候放在棧中)
引用類型需要兩段內存
第一段存儲實際的數據,它總是位于堆中
第二段是一個引用,指向數據在堆中的存放位置
當我們使用引用類型賦值的時候,其實是賦值的引用類型的引用。
如果數組是一個值類型的數組,那么數組中直接存儲值,如果是一個引用類型的數組(數組中存儲的是引用類型),那么數組中存儲的是引用(內存地址)。
值類型和引用類型在內存中的表示
分析下面的變量在內存中的表示方式
static void Test1()
{
int i = 34;
int j = 34;
int temp = 334;
char c = 'a';
bool b = true;
}
static void Test2()
{
int i = 34;
int j = 234;
string name = "zhangsan";
}
static void Test3()
{
string name = "zhangsan";
string name2 = "lisi";
name = name2;
name = "wangwu";
Console.WriteLine(name+":"+name2);
}
static void Test4()
{
Vector3 v = new Vector3();
v.x = 100;
v.y = 100;
v.z = 100;
Vector3 v2 = new Vector3();
v2.x = 200;
v2.y = 200;
v2.z = 200;
v2 = v;
v2.x = 300;
Console.WriteLine(v.x);
}
static void Test5()
{
Vector3[] vArray = new Vector3[]{ new Vector3(), new Vector3(), new Vector3() };
Vector3 v1 = vArray[0];
vArray[0].x = 100;
v1.x = 200;
Console.WriteLine(vArray[0].x);
}