所有的引數傳遞都是 傳值,從來沒有 傳引用 這個事實。
所有的引數傳遞都會在 程式執行棧上新分配乙個值的複製品.
樓主的第一段**。
public static void test(pass passa);
這個傳的 passa 的 位址值。這個 位址值 被複製了乙份。
不信,你寫:
public static void test(pass passa);
看看, 對passa有什麼影響?
毫無作用。函式呼叫出來後,passa還是原來的值,不會變成null.
但是,你的**對 passa進行了操作 passa.a ,改變了passa的成員變數。
這個成員變數是乙個真實指向string 的 位址,當然能夠被改變。
這就是操作 (.) 和 賦值 (=) 的區別。
這是對 成員變數 a 的 賦值。真正改變了成員變數 a 的值。
注意,這裡傳遞的引數是 passa, 而不是 a.
所以,passa 被複製了乙份。passa 的這個副本的 a 變數還 指向 原來的 passa 的 a 變數。
public static void test(stringbuffer str)
只有對引數的 賦值,沒有對引數的操作,當然不會產生影響。
public static void test(stringbuffer str)
對引數進行了操作,當然會產生影響。
public static void main( string args )
public static void helo( string str )
public static void helo1(int n)
輸出:
one
Java 引數傳遞
1 程式如下 package com.demo.test public class test void set string string,char ch public static void main string args 程式執行結果如下 before set test string 2018...
Java引數傳遞方式
如果方法a呼叫方法b,如果方法 的引數是基本資料型別或者string型別,那麼方法 向方法b傳遞引數的值,如果方法 的引數是物件或者陣列,那麼,方法 向方法b傳遞引數的引用。例子如下 public class variabletest changeparameter param1,param2,pa...
java函式引數傳遞方式
1 對於基礎型別,傳遞值 函式內對引數的操作不影響到外部的引數值。2 對於非基礎型別,傳引用。一般情況下,函式中引數的操作會影響到外部的引數值。如函式對student物件修改name屬性後,外部的student物件的name就變了 對於基礎型別的包裝型別,本來也適用於本規則,但實際卻另外蹊蹺 pub...