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

2021-07-15 21:29:39 字數 1101 閱讀 3237

public class test1

private void change(string str)

}列印結果:

hello 

hello

要理解上面的問題,首先要理解物件和引用的關係。

test1中,string s = new string("hello"); 在堆記憶體中儲存了物件的值「hello」,而在棧記憶體中儲存了物件的引用s,引用s儲存了物件的位址123a。當呼叫change()方法傳遞引數時,實際上是拷貝了引用s所儲存的位址123a,當然也就指向了同乙個物件。

而當執行了str = "world"; 後,相當於str = new string("world"); 又建立了乙個新的物件,這時候堆記憶體中就分配了乙個新的位址用於存放新物件和他的值「world」。而棧記憶體中的str中儲存的位址也變為新物件的位址123b,不再是123a,那麼很顯然str指向的是「world」這個物件。而引用s指向的物件的值還是「hello」。

public class test2

private void change(int num)}

列印結果: 4

4再來看一下test2,前面test1講的是引用資料型別,這裡要講基本資料型別。

基本資料型別的值是直接儲存在棧記憶體的引用裡的,當呼叫change()方法的時候,傳遞的實際上是引用i存放的值4。

當呼叫num = 2;時,實際上是在棧記憶體中新開闢了乙個位址,值是2,並不影響原來的i。

public class test2

private void change(int num)}

列印結果: 4

4

Java中方法的引數傳遞機制

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

JAVA中方法引數的引用傳遞

當乙個物件被當作引數傳遞到乙個方法 這就是所謂的按引用傳遞。public class user public void setname string name public class test public static void main string args 上面 的輸出結果是 hello ...

C 中方法引數的傳遞

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