1. 程式人生 > 其它 >一、java基礎-9.3_值傳遞&引用傳遞 詳解

一、java基礎-9.3_值傳遞&引用傳遞 詳解

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