Java是值傳遞還是引用傳遞

2021-09-20 11:56:10 字數 2598 閱讀 5277

基本型別

如上圖所示,基本型別傳遞時,執行緒在棧上分配形式引數並拷貝實際引數的值。

/**

* create with intellij idea

* author : wangzhenpeng

* date : 2018/4/8

* time : 上午9:48

* e-mail : [email protected]

* description : test

*/public class test

static void change(int value)

}

結果輸出:

inner: 200

outer: 100

方法修改的只是形式引數,對實際引數沒有作用。方法呼叫結束後形式引數隨著棧幀**。

引用型別

如上圖所示,引用型別傳遞時,傳遞的是引用的值,從這個角度來講還是值傳遞。如果是引用傳遞的話,傳遞的應該是引用的位址,而不是引用的值。

/**

* create with intellij idea

* author : wangzhenpeng

* date : 2018/4/8

* time : 上午9:48

* e-mail : [email protected]

* description : test

*/public class test

static void change(person value)

static class person

public void setname(string name)

public integer getage()

public void setage(integer age) }}

結果輸出:

inner: 18

outer: 18

方法修改的是引用所指向的資料空間的資料,所以方法外部也能看到修改的結果。

基本型別的陣列也是物件,所以int 傳遞的也是物件應用的值。

/**

* create with intellij idea

* author : wangzhenpeng

* date : 2018/4/8

* time : 上午9:48

* e-mail : [email protected]

* description : test

*/public class test

static void change(int value)

}

執行結果:

inner: 200

outer: 200

如果對引用型別的傳遞稍作修改

static void change(person value)
執行結果:

inner: 18

outer: 17

用**釋為:

同理string,integer等型別的封裝型別為final型別,對資料的修改操作實際上是建立了乙個新的物件

/**

* create with intellij idea

* author : wangzhenpeng

* date : 2018/4/8

* time : 上午9:48

* e-mail : [email protected]

* description : test

*/public class test

static void change(string value)

}

執行結果:

inner: abc

outer: 123

Java是值傳遞還是引用傳遞?

廢話不多說,上 很簡單,圖一中呼叫靜態方法intvalues int t 毫無疑問是傳遞值,因為如果是引用傳遞,那麼二者列印的值是一致的。很明顯,a 之後,t的值沒有發生改變。圖二也是一樣,清晰明了,把方法引數的值賦值給a,然後改變a的值,二者值列印均一致,那是因為t代表的是乙個堆記憶體的位址,基本...

java中函式是值傳遞還是引用傳遞?

先看乙個例子 public class test1 static void changenum int a 結果 changenum a 100 main a 10 說明對於基本的數值型別其實傳遞的是乙份數值的拷貝,傳入函式之後跟原來的值就沒有關係了,在函式中改變這個數的值也不會影響到原來的值。再看...

java中函式是值傳遞還是引用傳遞?

先看乙個例子 public class test1 static void changenum int a 結果 changenum a 100 main a 10 說明對於基本的數值型別其實傳遞的是乙份數值的拷貝,傳入函式之後跟原來的值就沒有關係了,在函式中改變這個數的值也不會影響到原來的值。再看...