C#中從記憶體空間的角度看資料型別,並延申到static方法的分析
阿新 • • 發佈:2018-12-01
資料型別這篇文章主要討論的是值型別和引用型別,值型別在定義的時候就會將該值儲存在棧中,而引用型別是分配在堆中,在堆中存放的是資料區域地址,它用來指向一塊記憶體空間。棧可以理解為儲存的都是一些資料變數,而堆中放的都是一些例項化物件。在對值型別操作時不會影響其他值,而當引用變數引用其他引用變數時,由於引用的是資料地址,所以對該引用變數的操作會改變原引用變數。例如程式:
namespace STORE { class Program { static void Main(string[] args) { int x = 0; int y = x; y = 100; SHU shu = new SHU(); SHU shu1 = shu; shu1.a = 50; Console.WriteLine("{0},{1}",x,y); Console.WriteLine("原來引用型別shu的值為:{0}",shu.a); Console.WriteLine("後來引用型別shu1的值為:{0}", shu1.a); } } class SHU { public int a = 0; } }
結果是
同樣之前討論過的類和物件中對於方法的呼叫也是一樣,static定義的是靜態變數,當被定義時,就已經在記憶體中分配了空間,而非靜態變數可以理解為一個虛擬的空間,只有當被例項物件化之後,才能被產生出來,才能進行使用。