什麼是值類型? 值類型: 就是非類類型,委托類型,介面類型,string類型的類型稱為值類型。 引用類型類型:就是類類型,委托類型,介面類型,string類型稱為引用類型。 值類型與引用類型的賦值問題。。。。 值類型的賦值:值類型之間的賦值是創建一個副本,兩個完全獨立的變數存儲一個值。 輸出結果:1 ...
什麼是值類型?
值類型: 就是非類類型,委托類型,介面類型,string類型的類型稱為值類型。
引用類型類型:就是類類型,委托類型,介面類型,string類型稱為引用類型。
值類型與引用類型的賦值問題。。。。
值類型的賦值:值類型之間的賦值是創建一個副本,兩個完全獨立的變數存儲一個值。
int x=10;
int y=x;
y=20;
Console.WriteLine(x+"\t"+y)
輸出結果:10 20
因為值類型之間的賦值是創建副本並不是引用,那麼你對賦值之後的另一個變數改變值不會影響到另一個變數。這就是值類型。
引用類型的賦值:引用類型的賦值時引用同一個對象,即兩個引用類型變數將對同一個對象進行引用,對其中任何一個變數進行操作,都會影響到另一個。
var listTwo=listOne;
listTwo.Add(6);
listTwo.ForEach(x=>Console.Write(x+"\t"));
Console.WriteLine();
listOne.ForEach(y=>Console.Write(y+"\t"));
輸出結果:
2 3 4 5 6
2 3 4 5 6
因為引用類型變數之間的賦值是將自身所引用的對象交給另一個變數引用,那麼他們就引用了同一個對象。即同一個對象那麼對象在記憶體中的地址是被兩個對象所引用,那麼就形成了引用同一個對象。
如果對其中的一個變數使其引用另一個對象然後修改,他就不會影響到之間賦值的對象,因為他更換了所引用的對象。(變數在棧中的地址是不同的除非在方法參數列表中由ref關鍵字聲明一個類型變數那麼變數的地址是相同的)
聲明:無論值類型變數還是引用類型變數都是在棧中分配記憶體的。
而實例/對象的創建是在堆記憶體中創建的。那麼引用類型變數所能實現引用實例是因為,引用類型變數存儲了對象在對記憶體中的地址形成引用。
註意:值類型變數在棧中分配多大的記憶體給變數是由你聲明的變數的類型決定的例:int 32位 則在棧中分配4位元組記憶體給這個變數
當聲明引用類型變數的時候,系統直接給其在棧中分配4位元組記憶體給變數用於存儲對象在堆中的地址。