Java方法参数

Java方法参数

在程序设计语言中如何将参数传给方法(或函数):

  1. 按值调用:方法接受的是调用者提供的值
  2. 按引用调用:方法接受的是调用者提供的地址

Java程序设计语言总是采用按值调用(方法得到的是所有参数值的一个副本)

public static void main(String [] args)
    {
        int x1=6;
        add(x1);
        System.out.println(x1);

    }
    public static void add(int x)
    {
        x=x+x;
    }

调用add()方法后,x1值还是6,并没有改变,具体流程:

  • x初始化为x1值的一个副本
  • x加上自己后为12,但是x1的并没有改变
  • 方法结束后,参数变量x不再使用

如果传入的是对象引用,很容易改变x1的值

    int x1=6;
    public static void main(String [] args)
    {

        Test test=new Test();
        test.add(test);
        System.out.println(test.x1);

    }
    public  void add(Test x)
    {
        x.x1=x.x1+x.x1;
    }

具体步骤是:

  • x初始化test对象变量的一个副本,两个对象变量都指向同一类
  • add()利用x参数变量,调用x1参数完成操作
  • 方法结束后,x不在使用,对象变量test继续引用那个对象

但是Java并不是按引用调用

    int x1;
    public static void main(String [] args)
    {

        Test test=new Test(0);
        Test test1=new Test(1);
        test.swap(test,test1);
        System.out.println(test.x1);
        System.out.println(test1.x1);

    }
    public Test( int x1)
    {
        this.x1=x1;
    }
    public  void swap(Test x,Test y)
    {
        Test temp=x;
        x=y;
        y=x;
    }

我们发现输出还是0,1,对象并没有发生交换,因为x,y分别是对象变量test,test1的副本,方法执行时只完成x,y副本的交换,方法执行结束后,x,y变量不再使用,test,test1还是指向对象并没有改变。

Java对象引用其实是按值传递。

总结:

  1. 方法不能修改基本数据类型的参数(即数值型或布尔型)
  2. 方法可以改变对象参数的状态
  3. 方法不能让一个对象参数引用一个新的对象

在c++中可以用&实现按引用调用,&符号相当于取地址的意思。例void swap(Test &x,Test&y)

posted @ 2020-11-16 10:01  cwstd  阅读(293)  评论(0编辑  收藏  举报