[18/11/27] 参数传递机制

一、参数传递机制

          Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。 也就是说,我们得到的是“原参数的复印件,而不是原件”。因此,复印件改变不会影响原件。

         传递的是值的副本。但是引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味着原参数指向对象的值也发生了改变”。

代码示例:

 1 class User
 2 {
 3     int id;
 4     String name;
 5     String pwd;
 6 
 7     public User(int id,String name){
 8         this.id=id;
 9         this.name=name;
10     }
11    //    传递的是值的副本。但是引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,
12    //  改变“副本指向地址对象的值,也意味着原参数指向对象的值也发生了改变.
13    //   A--------->B  B复印A 通过A直接改变对象C和通过A到B再改变C 达到效果是一样的
14    //   |         | 
15    //    -------->C   
16     public void testParameter01(User u){  //堆中 对象u1(假设对象地址为100,即u1=100) 包含:id=100 String="李白"(去方法区找)
17         u.name="杜甫"; //u1.testParameter01(u1); 相当于u=u1=100  u.name改变了地址100中的内容,输出"杜甫" 即不同参数指向同一对象
18     }
19 
20 
21     public void testParameter02(User u){ // 开始时u=u1=100 但新建了对象(假设对象地址为105),新对象把地址105传给u,此时u=105
22         u=new User(03,"苏轼");//但不影响u1的值(u1=100,因为u是复制u1的值),结果要求输出u1.name 还会输出"杜甫"
23     }
24 }
25 
26 public class Test_1127_01 
27 {
28     public static void main(String[] args) 
29     {
30         User u1=new User(01,"李白");
31 
32         u1.testParameter01(u1);
33         System.out.println(u1.name);
34 
35         System.out.println("----------");
36 
37         u1.testParameter02(u1);
38         System.out.println(u1.name);
39 
40         
41 
42     }
43 }

 

posted @ 2018-11-28 17:53  ID长安忆  阅读(156)  评论(0)    收藏  举报