值型別和引用型別的傳參問題

2021-07-11 00:57:26 字數 1684 閱讀 8385

關於值型別和引用型別已經寫了兩篇部落格,之前大多都是理論階段,今兒就舉個栗子來看看他們兩種資料型別在傳遞引數方面到底有什麼不同的地方。今天的開場白還真的挺開門見山的哈~

首先建立乙個person的類,有姓名、年齡、樣貌三個屬性

public class person

public int age

public string look

}

然後客戶端呼叫:我們首先例項化person這個類,並賦給他初始值,但是呢我想讓他變得年輕一點,變得強壯一點

class program

;//但是我想讓我的偶像變得年輕一點,strong一點

int age = khalil.age;//宣告了乙個值型別變數,並將大同的年齡減少了3歲

khalil.age = 30;

person 方大同 = khalil;//宣告了乙個引用型別變數

khalil.look = "strong";//khalil想變得強壯一點

console.writeline("khalil's age:\t", khalil.age);

console.writeline("age's value:\t", age);

console.writeline("khalil's look:\t", khalil.look);

console.writeline("datong's look:\t", 方大同.look );

console.readline();}}

執行結果:

從執行結果我們可以看到我雖然想讓方大同變得年輕一點,但是他實際的年齡沒有發生改變,但是樣貌這個屬性確實改變了。這是因為age是int型別屬於值型別,而look是string型別是引用型別,當執行

int age = khalil.age
這一句**時,是在棧中重新分配一塊記憶體,存放khalil.age的副本,所以棧中是這個樣子的:

khalil.age = 30;
執行完這一句,棧中是變成了這個樣子,改變的只是副本:

我們在來看看look屬性的變化,執行完下邊一句,棧中是這個樣子的(黑色箭頭):

person 方大同 = khalil;//宣告了乙個引用型別變數

khalil.look = "strong";//khalil想變得強壯一點

今天這個小例子給以讓我們很清晰的看出來值型別和引用型別在傳遞引數時的區別,雖然對於這部分知識總結了三篇部落格,但還得加深理解,隨著實踐在慢慢摸索吧!~~~

js中基礎型別和引用型別傳值問題

基本型別的資料是存放在棧記憶體中的,而引用型別的資料是存放在堆記憶體中的。基本型別的複製就是在棧記憶體中開闢出了乙個新的儲存區域用來儲存新的變數,這個變數有它自己的值,所以如果其中乙個的值改變,則不會影響到另乙個。var a 1 var b a b 4 console.log a,b 定義了乙個物件...

c 值型別與引用型別的傳參 形參與實參

形參是指被呼叫方法中的引數 實參是指傳遞給方法的引數 1 值型別傳參是按值傳遞 值型別傳參,形參接受到的是實參的乙個副本,即形參發生變化,實參不會發生任何變化 2 引用型別引數按值傳遞 當引數傳遞的是引用型別時,傳遞和操作是目標的位址,由於位址指向的是實參的引數 那麼形參也是指向的同乙個值,對形參進...

引用型別和值型別

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