基本型別
如上圖所示,基本型別傳遞時,執行緒在棧上分配形式引數並拷貝實際引數的值。
/**
* 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 說明對於基本的數值型別其實傳遞的是乙份數值的拷貝,傳入函式之後跟原來的值就沒有關係了,在函式中改變這個數的值也不會影響到原來的值。再看...