JAVA中方法引數的引用傳遞

2021-09-02 16:19:29 字數 1568 閱讀 1376

當乙個物件被當作引數傳遞到乙個方法」,這就是所謂的按引用傳遞。

public class user 

public void setname(string name)

}

public class test 

public static void main(string args)

}

上面**的輸出結果是「hello world」,這不必多說,那如果將set方法改為如下,結果會是多少呢?

public void set(user user)
答案依然是「hello world」,下面就讓我們來分析一下如上**。

首先:

user user = new user();
是在堆中建立了乙個物件,並在棧中建立了乙個引用,此引用指向該物件,如下圖:

test.set(user);
是將引用user作為引數傳遞到set方法,注意:這裡傳遞的並不是引用本身,而是乙個引用的拷貝。也就是說這時有兩個引用(引用和引用的拷貝)同時指向堆中的物件,如下圖:

user.setname("hello world");
在set()方法中,「user引用的拷貝」操作堆中的user物件,給name屬性設定字串"hello world"。如下圖:

user = new user();
在set()方法中,又建立了乙個user物件,並將「user引用的拷貝」指向這個在堆中新建立的物件,如下圖:

user.setname("change");
在set()方法中,「user引用的拷貝」操作的是堆中新建立的user物件。

set()方法執行完畢,目光再回到mian()方法

system.out.println(user.getname());
因為之前,"user引用的拷貝"已經將堆中的user物件的name屬性設定為了"hello world",所以當main()方法中的user呼叫getname()時,列印的結果就是"hello world"。如下圖:

Java中方法的引數傳遞機制

public class foo public static void operator stringbuffer x,stringbuffer y 最近看到這道題,網上好多錯誤解答,為防止初學者被誤導,特發文與大家 先說結果 ab,b 關鍵點在於 執行至operator方法時,是將實參a,b的值複...

java中方法的引數傳遞的是什麼?

public class test1 private void change string str 列印結果 hello hello 要理解上面的問題,首先要理解物件和引用的關係。test1中,string s new string hello 在堆記憶體中儲存了物件的值 hello 而在棧記憶體中...

C 中方法引數的傳遞

我們知道,使用引數傳遞給方法有兩種傳遞方式,一種是引用傳遞,另一種則是值傳遞。變數在通過引用方式傳遞給方法時,傳遞給方法的就是這個變數,因此在被呼叫的方法內部對該變數內容進行修改,方法退出後修改的變數值依然有效。而變數通過值傳遞給方法時,傳遞的就是該變數的乙個副本,在方法內部對其修改當方法退出後該變...