Java 傳值和傳引用的區別

2021-08-28 05:58:14 字數 1541 閱讀 9859

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

直接上**,更好的理解兩者的區別。首先看傳基本資料型別,如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)

}

輸出:

args = [test1]

args = [test1]

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

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

傳值和傳引用的區別

大家都用過sqlhelper,在sqlhelper類中定義一些資料庫助手函式 通過分析某函式中呼叫 關閉連線 函式和 關閉cmd命令 函式後,是否可以關閉連線和cmd命令來分析傳值和傳引用的區別 請注意看 中被框注的部分 分析 在executedataset 引數 函式的最後呼叫closeconn ...

傳值和傳引用 傳指標的區別

傳值,是把實參的值賦值給行參,那麼對行參的修改,不會影響實參的值 傳位址,是傳值的一種特殊方式,只是他傳遞的是位址,不是普通的如 int,那麼傳位址以後,實參和行參都 指向同乙個物件 傳引用,真正的以位址的方式傳遞引數,傳遞以後,行參和實參 都是同乙個物件 只是他們名字不同而已,對行參的修改將影響實...

傳值 傳指標和傳引用的區別

傳值 void myswap int a,int b 傳指標 1 void myswap int a,int b 2 void myswap int a,int b 引用傳遞 void myswap int a,int b 函式傳值 傳值實際上是在子函式的棧裡面重新開闢乙個空間儲存傳進來的實參引數值...