值型別和引用型別

2022-02-07 18:24:14 字數 911 閱讀 1032

好久沒更新了,出來透透氣。。。。

在網上發現很多關於值型別和引用型別的問題,說一下自己的理解()...

值型別:在作為引數傳遞時被複製(即,它們通過值來傳遞)。

引用型別:類型別、介面型別、陣列型別或委託型別。

值型別是儲存在堆疊上的,對值型別變數賦值將建立所賦的值的乙個副本。

1inti =0

;2intj =i;

3i=1;

4console.write(

"i=,j=

",i,j);

執行結果為:i=0,j=1;j不隨著i的改變而改變。

引用型別分配在託管堆中,乙個引用類中的值型別分配在託管堆中,對引用類    型變數賦值將建立引用的副本,而不是引用物件的副本。

1class

test

2,j="

,of.num,ot.num);

14}15

}16class

objectprint

17執行結果為:i=6,j=6;of.num隨著ot.num的改變而改變。因為他們指向同乙個引用。

上面的兩個**片斷可以很清楚的看到值型別和引用型別的區別,ok,繼續執行下面的**:

1string

snum ="

0";2

string

snumt 

=snum;

3snumt ="

1";4

console.write(

"snum=,snumt=

",snum,snumt);

執行結果為:snum=0,snumt=1;string也是引用型別,為什麼同是引用型別會有不同的情況產生。因為string是乙個比較特殊的引用型別,string之間的賦值是開闢了一塊記憶體將源string拷貝到目標string,在實際的賦值過程中傳遞的是值。

引用型別和值型別

c 是一種型別安全的語言。每乙個變數都要求定義為乙個特定的型別,並且要求儲存在變數中的值只能是這種型別的值。變數既能儲存值型別,也可以儲存引用型別,還可以是指標。這一課將講述前兩種型別,關於指標的討論我們將在下一課中進行。下面是關於值型別和引用型別不同點的概論 如果乙個變數v儲存的是值型別,則它直接...

引用型別和值型別

c 中值型別和引用型別作為方法引數傳遞的時候其實都可以說是 值 的傳遞,只不過這裡的 值 指代的東西有所區別。當方法的引數為值型別時,方法傳遞的是值本身的值。當方法的引數為引用型別時,方法傳遞的則是應用型別的引用的位址,也就是引用型別位址在棧上的值。舉個引用型別作為引數傳遞的例子 static vo...

值型別和引用型別

為了更好地說明兩種型別之間的區別,借用如下的 來說明 值型別引用型別 記憶體分配地點 分配在棧中 分配在堆中 效率效率高,不需要位址轉換 效率低,需要進行位址轉換 記憶體 使用完後,立即 使用完後,不是立即 等待gc 賦值操作 進行複製,建立乙個同值新物件 只是對原有物件的引用 函式引數與返回值 是...