Hello,大家好!我是程序员阿飞!今天呢,女友送了我一套机械键盘,很开心。我们主要学习一下Java中最常见的知识点:值传递。好了,废话不多说了,我们直接进入今天的主题。

    1、形参与实参

     答:形参是指在定义函数名和函数体的时候使用的参数,目的是为了接受调用该函数时传入的参数。实参是指在主调函数中调用一个有参函数时,函数名后面括号中的参数。

    public static void main(String  [ ] args){

        Test test = new Test();

        test.method("zhutou");//zhutou为实际参数

    }

      public void Method(String str){  //str 为形式参数

          System.out.println("Hello World!");

      }

    2、值传递、引用传递

     答:值传递是指在调用函数时将实际参数复制一份传递到有参函数中,这样在函数中对参数进行修改,将不会影响到实际参数。引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数进行修改将影响到实际参数。

    根本区别:值传递会创建副本,引用传递不创建副本。

     public static void main(String[] args) {

           ParamTest pt = new ParamTest();   

           int i = 10;

           pt.pass(i );

           System.out.println("print in main , i is " + i);

        }

        public void pass(int j) {

             j = 20;

            System.out.println("print in pass , j is " + j);

        }

        print in pass , j is 20

        print in main , i is 10

    public static void main(String[] args) {

         ParamTest pt = new ParamTest();

         User hollis = new User();

         hollis.setName("Hollis");

         hollis.setGender("Male");

         pt.pass(hollis);

        System.out.println("print in main , user is " + hollis);

    }

    public void pass(User user) {

         user = new User();

         user.setName("hollischuang");

         user.setGender("Male");

         System.out.println("print in pass , user is " + user);

    }

    print in pass , user is User{name='hollischuang', gender='Male'}

    print in main , user is User{name='Hollis', gender='Male'}

所以,上面的参数其实是值传递,把实参对象引用的地址当做值传递给了形式参数。

参考地址:https://blog.csdn.net/bjweimengshu/article/details/79799485