一、java基礎-9.3_值傳遞&引用傳遞 詳解
阿新 • • 發佈:2022-03-24
1、關於值傳遞
值傳遞:是指在呼叫函式時,將實際引數複製一份傳遞到函式中,這樣在函式中如果對引數進行修改,就不會影響到實際引數
如下圖所示,當傳遞引數之前會將引數進行復制,函式中修改了引數,不會影響實際引數
值傳遞是對於是對基本資料而言,例如下面例子,number沒有改變。
public class Test01 {
public static void main(String[] args) {
int number = 10; new Test01().change(number);
System.out.println(number);
}
public void change(int a){
a+=1;
}
}
2、關於引用傳遞
引用傳遞:是指在呼叫函式時,將實際引數的地址傳遞到函式中,那麼在函式中對引數進行修改,將會影響到實際引數
引用資料型別分為兩個部分,引用變數和物件,這兩個部分放在不同的地方,引用變數在棧中,而物件是放在堆記憶體中的,引用變數指向物件。 如下圖所示,當傳遞引數之前會將引數進行復制,但是複製的是引用變數,複製後的引用變數還是指向記憶體中的同一物件,所以引用傳遞中,函式修改了引數會影響實際引數
引用傳遞是對於引用資料型別而言,例如對於User類姓名的修改,會改變物件的name。
public class Test01 {
public static void main(String[] args) {
User user = new User("小明", 12);
new Test01().change(user);
System.out.println(user);
}
public void change(User a){
a.setName("小張");
}
}
注意點,引用型別中的String的值是放在常量池中,我們改變副本的值不會影響到原來的值。
例如在change放發中改變了副本的值,但是原來的str字串不會改變。
public class Test01 {
public static void main(String[] args) {
String str = "hello";
new Test01().change(str);
System.out.println(str);
}
public void change(String a){
a="yes";
}
}
原文連結:https://mbd.baidu.com/ug_share/mbox/4a81af9963/share?tk=e2f18815ac941a56b643afa789e393f4&share_url=https%3A%2F%2Fyebd1h.smartapps.cn%2Fpages%2Fblog%2Findex%3FblogId%3D109373902%26_swebfr%3D1%26_swebFromHost%3Dbaiduboxapp&qq-pf-to=pcqq.c2c