[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 }

浙公网安备 33010602011771号