傳值 傳值引用

2022-06-06 16:33:11 字數 1436 閱讀 8366

**

首先對傳值和傳引用要有個基本的概念

傳值:傳遞的是值的副本。方法中對副本的修改,不會影響到呼叫方。

傳引用:傳遞的是引用的副本,共用乙個記憶體,會影響到呼叫方。此時,形參和實參指向同乙個記憶體位址。對引用副本本身(物件位址)的修改,如設定為null,重新指向其他物件,不會影響到呼叫方。

直接上**,更好的理解兩者的區別。首先看傳基本資料型別,如int、long等。

//

基本資料型別

public

class

paramchangevalue

private

static

void change(int

i)}

輸出:args = [1]

args = [1]

從輸出的的結果中可以看到原本的s並沒有被修改,即傳值傳遞的是值的副本,不會影響到本身。

再來看傳物件。

//

物件public

class

objectchangevalue

public

void setvalue(int

value)

} public

static

void

main(string args)

private

static

void

change(score score)

}

輸出:args = [1]

after args = [2]

從結果中我們可以看到score例項的value值被修改了,因為傳引用後指向的是同乙個位址,修改的實際上也就是這個位址上的值,另外要注意一點的是如果物件被重新建立或賦值為null,即new會重新指向其他物件,不影響其原物件的值。

第三部分:傳string、integer等immutable型別。

//

string、integer、long等

public

class

stringchangevalue

private

static

void

change(string i)

}

只要知道string、integer類是final型別的就明白輸出的結果為什麼是這樣的。

總結:基本型別(byte,short,int,long,double,float,char,boolean)為傳值;物件型別(object,陣列,容器)為傳引用;string、integer、double等immutable型別因為類的變數設為final屬性,無法被修改,只能重新賦值或生成物件。當integer作為方法引數傳遞時,對其賦值會導致原有的引用被指向了方法內的棧位址,失去原有的的位址指向,所以對賦值後的integer做任何操作都不會影響原有值。

傳值 傳引用 傳指標

收藏 相關概念 c 三種傳遞引數方式 傳引數的值 稱值傳遞,簡稱傳值 傳引數的位址 稱位址傳遞,簡稱為傳址 和引用傳遞 稱為傳引用 相應的函式傳值呼叫,傳址呼叫和傳引用呼叫 形參 實參 函式定義時參數列中的引數稱為形式引數,簡稱形參 函式呼叫時參數列中的引數稱為實際引數,簡稱實參。實參和形參之間的資...

傳值 傳引用 傳指標

相關概念 c 三種傳遞引數方式 傳引數的值 稱值傳遞,簡稱傳值 傳引數的位址 稱位址傳遞,簡稱為傳址 和引用傳遞 稱為傳引用 相應的函式傳值呼叫,傳址呼叫和傳引用呼叫 形參 實參 函式定義時參數列中的引數稱為形式引數,簡稱形參 函式呼叫時參數列中的引數稱為實際引數,簡稱實參。實參和形參之間的資料傳遞...

傳值 傳指標 傳引用

c語言的規則很簡單 所有的引數都是傳值呼叫 在這句話的基礎上,我們來分析值傳遞 指標傳遞 引用傳遞的區別。一 值傳遞 值傳遞,這與c函式的性質有關。c函式的所有引數均以 傳值呼叫 方式進行傳遞,這意味著函式值將獲得引數值的乙份拷貝,函式可以放心修改這個拷貝值,而不必擔心會修改呼叫程式實際傳給他的引數...