欢迎访问宙启技术站
智能推送

Java函数中参数传递的方式有哪几种

发布时间:2023-06-15 16:30:34

Java函数中参数传递的方式有以下几种:

1. 值传递(Pass by Value)

在值传递(Pass by Value)中,函数参数的值被保存在栈内存中,并复制给函数的形参。在函数内部,形参将作为局部变量使用,函数对形参作出的任何修改都不会影响到外部变量的值。

代码示例:

public class PassByValueExample {
    public static void main(String[] args) {
        int x = 10;
        int y = 20;
        swapValues(x, y);
        System.out.println("x:" + x + ",y:" + y);
    }

    public static void swapValues(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }
}

输出结果:

x:10,y:20

可以看到,虽然在函数swapValues中交换了参数a和b的值,但是并没有对外部变量x和y产生影响。

2. 引用传递(Pass by Reference)

在引用传递(Pass by Reference)中,函数参数是对象的引用,或者说是对象在内存中的地址。函数所接收的引用和外部变量指向同一块内存区域,在函数内部对参数的任何修改都会影响到外部变量的值。

代码示例:

public class PassByReferenceExample {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println("调用swap方法之前,arr[0] = " + arr[0]);
        swap(arr, 0, 1);
        System.out.println("调用swap方法之后,arr[0] = " + arr[0]);
    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

输出结果:

调用swap方法之前,arr[0] = 1
调用swap方法之后,arr[0] = 2

可以看到,调用swap方法后,外部变量arr的值也被修改了。

3. 对象传递(Pass Object)

对象传递(Pass Object)是一种特殊的引用传递方式,因为Java中所有对象都是引用类型。在对象传递中,函数参数是对象的引用,所有对引用指向的对象的修改都会影响到外部变量的值。

代码示例:

public class PassObjectExample {
    public static void main(String[] args) {
        Person p = new Person("Tom");
        System.out.println("调用setName()方法之前,p.name = " + p.getName());
        setName(p, "Jerry");
        System.out.println("调用setName()方法之后,p.name = " + p.getName());
    }

    public static void setName(Person p, String name) {
        p.setName(name);
    }
}

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

输出结果:

调用setName()方法之前,p.name = Tom
调用setName()方法之后,p.name = Jerry

可以看到,调用setName()方法后,外部变量p的引用指向的Person对象的name属性也被修改了。

4. 数组传递(Pass Array)

在Java中,数组也是引用类型,因此数组传递(Pass Array)和对象传递(Pass Object)是一样的。在数组传递中,函数参数是数组变量的引用,因此所有对数组元素的修改都会影响到外部数组变量的值。

代码示例:

public class PassArrayExample {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println("调用changeArray方法之前,arr[0] = " + arr[0]);
        changeArray(arr, 0, 100);
        System.out.println("调用changeArray方法之后,arr[0] = " + arr[0]);
    }

    public static void changeArray(int[] arr, int index, int value) {
        arr[index] = value;
    }
}

输出结果:

调用changeArray方法之前,arr[0] = 1
调用changeArray方法之后,arr[0] = 100

可以看到,调用changeArray方法后,外部变量arr的值也被修改了。

以上就是Java函数中参数传递的几种方式。在编写函数时,需要根据实际需求来选择合适的传递方式,避免出现不必要的问题。