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