Java引用傳遞之二

一、無論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

分析:數組的傳值本質時傳地址值的副本。

相關文章
相關標籤/搜索