一.什麼是值型別?什麼引用型別?
1.值型別的值是儲存在棧上的。引用型別是存在堆上的。
2.值型別變數宣告之後,不管是否已經分配記憶體,編譯器在堆上為其分配記憶體。
3.引用型別宣告的時候,這時候只在棧中分配一小片記憶體用於容納乙個位址,此時候並沒有為其分配堆上的記憶體位址,
當new乙個例項的時候,真正建立時候,才在堆 上分配記憶體空間,並把堆上空間的位址儲存到棧上分配的小片空間中。
4.現實中,比如你再報紙上看到乙份報紙,發了乙個有趣的內容要分享給朋友,你可以在買乙份讓你朋友看,這時候你和朋友就可以分享到同樣的內容,但是從兩份獨立的報紙上,但是如果你在網頁上瀏覽資訊的時候,發現了有趣的內容,你會直接把url發給你的朋友的,這時候你和你的朋友看到的是相同的內容,是從乙個**上看到的。這裡面報紙的例子就是值型別,網頁的例子就是引用型別。值型別的賦值,是完全拷貝了實際內容,而引用型別則只是拷貝了指向實際內容的位址。
5.對於引用型別變數,它的值只是乙個引用,而非乙個物件。引用就像url位址一樣指向真實的物件,值型別儲存的就是真實的資料。
誤區:引用型別儲存在堆上,值型別儲存在棧上。
1.這句話只說對了一半,引用型別是儲存在堆上,但是值型別就不一定了。變數的值是在它宣告的位置儲存的,也是說乙個類有乙個int型別例項變數,那麼這個變數的值總是和物件中的其他資料一起儲存也就是堆上。只有區域性變數,和方法內部的變數或者方法引數是在棧上。對於c#2以及更高版本,許多區域性變數不完全存在棧上。
寫的時候,可能又遺漏的想不起來的,持續完善中。。。。。。
基本變數型別 和引用型別 知識點
ecmascript 變數可能包含兩種不同資料型別的值 基本型別值和引用型別值 基本型別值指的是儲存在棧記憶體的簡單的資料段,即這種值完全儲存在記憶體中的乙個位置。而引用型別值則是指那些儲存在堆記憶體中的物件,意思是變數中儲存的實際上只是乙個指標,這個指標指向記憶體中的另乙個位置,該位置儲存物件。基...
C 值型別和引用型別
c 資料型別 值型別,引用型別 概念 值型別直接儲存其值,引用型別儲存對值的引用 這兩種型別儲存在記憶體的不同地方 值型別儲存在堆疊中,引用型別儲存在託管堆上。乙個引用型別的例子,如圖 上圖中,只有乙個user物件,u1和u2都指向包含該物件的記憶體位置 執行結果 在c 中,基本資料型別如bool和...
c 值型別和引用型別
今天我們來學習一下什麼是值型別和引用型別。1.值型別的值存在棧上,引用型別棧上存的是位址,值在堆上 2.將乙個值型別變數賦給另乙個值型別變數時,將複製包含的值。引用型別變數的賦值只複製對物件的引用,而不複製物件本身。3.裝箱是將值型別轉換為引用型別,拆箱是將引用型別轉換為值型別,利用裝箱和拆箱功能,...