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

Java函数参数传递方式总结

发布时间:2023-05-28 08:26:08

Java函数参数传递方式有值传递和引用传递两种。

1. 值传递

值传递是将实际参数的副本传入函数。在函数内部,对参数的改变不会影响到实际参数的值。Java的八种基本数据类型(int、char、byte、long、short、float、double和boolean)就是采用值传递的方式传递参数的。

例如:

public class Test {
    public static void change(int i){
        i = 10;
    }
    public static void main(String[] args){
        int i = 5;
        change(i);
        System.out.println(i);    // 输出5
    }
}

在上面的例子中,change()函数中改变i的值,并不会影响到main函数中的i的值。

2. 引用传递

引用传递是将实际参数的引用地址传入函数。在函数内部,对参数的操作会影响到引用地址所指向的实际参数的值。Java中除了八种基本数据类型以外,其他类型都是引用类型。

例如:

public class Test {
    public static void change(int[] arr){
        arr[0] = 10;
    }
    public static void main(String[] args){
        int[] arr = {1,2,3};
        change(arr);
        System.out.println(arr[0]);    // 输出10
    }
}

在上面的例子中,通过改变arr数组的 个元素的值,实际上改变了main函数中的arr数组的值。

需要注意的是,虽然修改引用类型的值可以影响到实际参数的值,但是如果在函数内部重新为引用类型的参数赋值,则不会影响到实际参数。例如:

public static void modify(StringBuilder s) {
    s.append(" world!");
    s = new StringBuilder("hello");  // 这里是重新为s赋值,不会影响到实际参数
}

public static void main(String[] args) {
    StringBuilder s = new StringBuilder("hello");
    modify(s);
    System.out.println(s.toString());   // 输出:hello world!
}

在上面的例子中,虽然modify()函数中对s的改变影响到了实际参数的值,但是在函数内部重新为s赋值,并不会影响到实际参数的值。

总结一下:

Java的函数参数传递方式有值传递和引用传递两种,八种基本数据类型采用值传递方式,其他类型采用引用传递方式。在引用传递方式下,对参数的操作会影响到引用地址所指向的实际参数的值,但是重新为引用类型的参数赋值并不会影响到实际参数的值。