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

Java函数参数传递的注意事项

发布时间:2023-06-16 10:13:29

Java 中的函数是一组可重用的代码,它们以某种方式请求或接收输入,并返回输出。在调用 Java 函数时,传递参数是一个常见的操作。在参数传递中,有一些需要注意的事项,本文将对这些注意事项进行详细讲解。

一、Java 中函数参数的传递方式

Java 中函数参数的传递方式是值传递。值传递意味着传递的是参数值本身,而不是参数所引用的对象的地址。这意味着在函数内部对传递的参数的修改不会影响调用者的参数。

二、Java 参数传递中的基本数据类型

1、在 Java 中,如果传递基本数据类型的参数,则传递的是值的拷贝,而不是原始值。

例如下面的代码:


public class Test {

    public static void main(String args[]) {
        int a = 10;
        changeValue(a);
        System.out.println("a=" + a);
    }

    public static void changeValue(int a) {
        a = 20;
    }
}

在上述代码中,将 a=10 作为参数传递给 changeValue() 函数。函数修改 a 的值为 20,但原始调用者的参数 a 的值仍为 10。因此,输出 a=10。

2、如果将一个变量作为参数传递给函数,并在另一个函数中修改该变量的值,则原始调用者的变量值也会发生变化。

例如下面的代码:


public class Test {

    public static void main(String args[]) {
        StringBuffer str = new StringBuffer("Hello");
        changeValue(str);
        System.out.println("str=" + str);
    }

    public static void changeValue(StringBuffer str) {
        str.append(" world");
    }
}

在上述代码中,将 str 对象作为参数传递给 changeValue() 函数。在函数中,使用 append() 方法修改了该对象的值。在调用结束后,输出 str=Hello world。

三、Java 参数传递中的引用数据类型

1、Java 引用数据类型是指非基本类型或对象类型。在 Java 中,将引用数据类型作为参数传递给函数时,传递的是对象的引用,而不是对象的拷贝。

例如下面的代码:


public class Test {

    public static void main(String args[]) {
        StringBuffer str = new StringBuffer("Hello");
        changeValue(str);
        System.out.println("str=" + str);
    }

    public static void changeValue(StringBuffer str) {
        str = new StringBuffer("Java");
    }
}

在上述代码中,将 str 对象作为参数传递给 changeValue() 函数。函数修改 str 的引用为一个新的 StringBuffer() 对象。但原始调用者的参数 str 的值仍为 Hello。因此,输出 str=Hello。

2、如果将一个对象作为参数传递给函数,并在另一个函数中修改该对象的状态,则原始调用者的对象状态也会发生变化。

例如下面的代码:


public class Test {

    public static void main(String args[]) {
        Person p = new Person();
        p.setName("Tom");
        changeValue(p);
        System.out.println("name=" + p.getName());
    }

    public static void changeValue(Person p) {
        p.setName("Jerry");
    }
}

class Person {
    private String name;

    public String getName() {
        return name;
    }

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

在上述代码中,将 p 对象作为参数传递给 changeValue() 函数。函数修改 p 对象的状态,将其名称从 Tom 修改为 Jerry。在调用结束后,输出 name=Jerry。

四、Java 参数传递中的数组

在 Java 中,数组被视为引用类型。当将数组作为参数传递给函数时,传递的是数组的引用。

例如下面的代码:


public class Test {

    public static void main(String args[]) {
        int[] arr = {1, 2, 3};
        changeValue(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void changeValue(int[] arr) {
        arr[0] = 101;
        arr[1] = 102;
        arr[2] = 103;
    }
}

在上述代码中,将 arr 数组作为参数传递给 changeValue() 函数。函数将数组的值修改为 {101, 102, 103}。在调用结束后,输出 [101, 102, 103]。

五、结论

在 Java 中,函数参数的传递方式是值传递。在传递基本数据类型参数时,传递的是参数值的拷贝,而非原始值。在传递引用数据类型参数时,传递的是对象的引用,而非对象的拷贝。在传递数组时,传递的是数组的引用。了解这些注意事项可以让你更好地理解 Java 中函数参数的传递方式,从而更好地使用 Java 函数。