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

分析:数组的传值本质时传地址值的副本。

相关文章
相关标签/搜索