一、無論JAVA參數的類型是什麼,一概傳遞參數的副本。html
二、變量分爲兩類:對於基本類型變量,傳值的副本;對於一切對象型變量,傳引用的副本。數組
三、傳引用副本的實質就是複製指向地址的指針。spa
四、須要注意的是,String類型也是對象型變量,因此它必然是傳引用副本。只不過String是一個非可變類,使得其傳值仍是傳引用顯得沒有什麼區別。指針
五、對基本類型而言,傳值就是把本身複製一份傳遞,即便本身的副本變了,本身也不變;而對於對象類型而言,它傳的引用副本(相似指針)指向本身的地址,而不是本身實際值的副本,而不是採用複製對象值的方法。code
六、具體例子,請看本人博客http://www.cnblogs.com/XuGuobao/p/7233137.htmlhtm
七、實例對象對類的屬性的做用:對象
1 class Person01{ 2 int age = 30; 3 } 4 5 public class RefDemo04 { 6 7 public static void main(String[] args) { 8 Person01 p1 = new Person01(); 9 p1.age = 20; 10 System.out.println("p1.age = "+ p1.age); 11 Test(); 12 } 13 public static void Test(){ 14 Person01 p2 = new Person01(); 15 System.out.println("p2.age= " + p2.age); 16 } 17 }
輸出結果爲:blog
p1.age = 20
p2.age= 30get
分析:當從新new對象時,所用的屬性仍然時原始值。博客
八、
1 class Value{ 2 public int i = 15; 3 } 4 5 public class Test { 6 7 public static void main(String[] args) { 8 Test t = new Test(); 9 t.first(); 10 } 11 12 private void first() { 13 int i = 5; 14 Value v = new Value(); 15 v.i = 25; 16 second(v,i); 17 System.out.println(v.i); 18 } 19 20 private void second(Value v, int i) { 21 i = 0; 22 v.i = 20; 23 Value val = new Value(); 24 v = val; 25 System.out.println(v.i + " " + i); 26 } 27 }
輸出結果爲:
15 0
20
分析:對象v也是傳一份引用的副本,v.i = 20;經過引用的副本改變原對象的值爲20,但在語句Value val = new Value();中,new了一個新對象,而後執行v = Val;至關於引用的副本指向了一個新的Object。因此v.i = 15是改變新的Object的值,而不改變原對象的值。
九、數組的引用傳遞
1 public class Test01 { 2 3 public static void main(String[] args) { 4 char ch[] = {'n','g','e','t'}; 5 chage(ch); 6 System.out.println(ch); 7 } 8 9 private static void chage(char[] ch) { 10 ch[0] = 'c'; 11 } 12 }
輸出結果爲:cget
分析:數組的傳值本質時傳地址值的副本。