Unity中的值傳遞與引用傳遞


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又有值傳遞的效果,這是因為string是常量,不能更改,所以如果在函數里更改的話,其實是生成了另外一個string,但是原來的string還在,函數外的string還是原來的string。函數里的string指向另外一個新生成的string,給人一種值傳遞的假象。

string a = "aaa"; //==> a----->new String("aaa") 
string b = a; //==> b----->a, 傳引用 
b = "bbb"; //==> b----->new String("bbb"), 傳引用,b指向了一個新的字符串,a並沒有變。

  Vector3本質是結構體(struct),所以是值類型。

  組件(component)本質是類(class),所以是引用類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM