1. 值類型
值類型變量本身保存了該類型的全部數據,當聲明一個值類型的變量時,該變量會被分配到棧(Stack)上。
2. 引用類型
引用類型變量本身保存的是位於堆(Heap)上的該類型的實例的內存地址,並不包含數據。當聲明一個引用類型變量時,該變量會被分配到棧上。如果僅僅只是聲明這樣一個變量,由於在堆上還沒有創建該類型的實例,因此,變量值為null,意思是不指向任何類型實例(堆上的對象)。對於變量的類型聲明,用於限制此變量可以保存的類型。
3. Unity中的值類型與引用類型
值類型包括結構體(struct)和枚舉(enum)。
引用類型包括類(class)、接口(interface)、委托(delegate)、數組(array)等。
4.說點人話
常見的簡單類型如short、int、long、float、double、byte、char等其本質上都是結構體,對應struct System.Int16、System.Int32、System.Int64、System.Single、System.Double、Syetem.Byte、System.Char,因此它們都是值類型。但string和object例外,它們本質上是類,對應class System.String和System.Object,所以它們是引用類型。
string a = "aaa"; //==> a----->new String("aaa") string b = a; //==> b----->a, 傳引用 b = "bbb"; //==> b----->new String("bbb"), 傳引用,b指向了一個新的字符串,a並沒有變。
Vector3本質是結構體(struct),所以是值類型。
組件(component)本質是類(class),所以是引用類型。