值傳遞和引用傳遞的區別

2022-05-15 11:43:37 字數 991 閱讀 6569

示例**:

public

static

void

main(string args)

public

static

void change(int

a)

結果:

為什麼b的值不會被修改為1呢?

我們知道每個方法執行的時候都會在虛擬機器棧中生成乙個棧幀,而且這個棧幀中儲存著區域性變數表,運算元棧,動態鏈結等。

而change這個方法中的int a就儲存在區域性變數表中。但是對於int b來說,則儲存在堆中。也就是說a和b是兩個不同的東西。

而且棧幀中的int a只是堆中int b的乙個副本。

示例**:

public

static

void

main(string args)

public

static

void

referencepassing(stringbuffer sb)

結果:

顯然可以看到str的值已經改變了。

同樣執行referencepassing方法執行的時候,虛擬機器棧同樣會生成乙個棧幀。只不過區域性變數表中存放的是sb的引用位址,而這個位址指向的正是堆中的str物件。

所以堆中的str物件才會被修改。

引用傳遞和值傳遞的區別

有這麼一道面試題,題目如下 view plain using system public class test1 p.name,num static void a1 person p,intnum public class person 說說上面的程式產生的結果,以及產生這個結果的原因是什麼?我在以...

值傳遞和引用傳遞的區別

以值傳遞引數 當實參當作值來傳遞時,就產生了乙個新的拷貝。class test x static void fo int p p p 1 console.writeline p p 程式執行結果為 p 9,x 8 即x的值不會受p影響,給p賦乙個新值並不會改變x的內容,因為p和x存在於記憶體中不同的...

值傳遞和引用傳遞的區別

public class test 執行 得到的當前的結果如下 int1 10int2 10改變之後 int1 10int2 20process finished with exit code 0根據結果會發現int型別的傳遞,當int2值改變的時候,int1的值是沒有任何變化的,所以基本型別都是根...