面向对象 - Java参数传值机制

返回目录

参数传值机制

    • 基本数据类型参数的传值:Java中,方法中所有参数都是“值传递”,传递的是值的副本。也就是说,得到的是“原参数的复印件,而不是原件”,因此,复印件改变不会影响原件。
    • 引用类型参数的传值:传递的是值的副本,但是引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址的对象的值”,意味着原参数指向对象的值也发生了改变。
      package test;
      
      public class Test{
        String name;
          
        public static void main(String[] args) {
          test  t  =  new test("黄泽雨"); //创建对象并赋值name
            
          t.test1(t); //调用test.test1方法,并将t传递给test1.u变量
          System.out.println(t.name); //输出name,在test1方法中,修改了name的值,原参数也会被改变,输出"黄泽雷"
          t.test2(t);
          System.out.println(t.name); //test2创建的新对象不影响当前对象中name的值,所以不发生变化,还是输出"黄泽雷"
        }
          
        public test(String name) {
          this.name = name;
        }
          
        public void test1(test u){ //从main传递来的 t 赋值给局部变量u
          u.name="黄泽雷"; //改变name的值,此时原参数name也发生了变化
        }
        
        public void test2(test u){ //从main传递来的 t 赋值给局部变量u
          u = new test("黄泽风"); //新建对象不影响上一个对象,所以上一个对象的name不发生变化
        }
      }