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

Java函数的形参与实参怎么传递?

发布时间:2023-05-24 22:03:05

Java中函数的形参和实参的传递是非常重要的概念。形参是函数定义时声明的参数,实参是函数调用时传递给函数的参数。在Java中,传递参数有两种方式:传值和传引用。

传值

传值是指将实参的值拷贝一份传递给函数的形参。在函数内部修改形参的值不会影响到实参的值。Java中基本数据类型的传递就属于传值。

示例:

public class Test{
    public static void main(String[] args){
        int a = 1;
        print(a);
        System.out.println(a);
    }
   
    public static void print(int num){
        num = num + 1;
        System.out.println(num); // 输出2
    }
}

在上述示例中,主函数中定义了一个整型变量a,传递给print函数,print函数对形参num进行加1操作并输出,但在主函数中输出a的值仍然为1。

传引用

传引用是指将实参的地址传递给函数的形参,函数内部使用形参对实参进行的修改会直接影响到实参的值。Java中所有的引用类型都属于传引用。

示例:

public class Test{
    public static void main(String[] args){
        int[] arr = new int[]{1,2,3};
        changeArr(arr);
        for(int i=0; i<arr.length; i++){
            System.out.println(arr[i]); // 输出2,3,4
        }
    }
   
    public static void changeArr(int[] arr){
        for(int i=0; i<arr.length; i++){
            arr[i] = arr[i] + 1;
        }
    }
}

在上述示例中,主函数中定义了一个整型数组arr,传递给changeArr函数,changeArr函数对形参arr进行遍历并加1操作,主函数中输出arr数组的值也被修改了。

需要注意的是,传递引用类型时实参所指向的对象本身不会被修改。如下示例:

public class Test{
    public static void main(String[] args){
        StringBuffer s = new StringBuffer("hello");
        changeStr(s);
        System.out.println(s.toString()); // 输出"hello, world"
    }
   
    public static void changeStr(StringBuffer str){
        str.append(", world");
    }
}

在上述示例中,主函数中定义了一个StringBuffer类型的对象s,传递给changeStr函数,changeStr函数对形参str进行了修改,但s本身并没有被修改,输出结果也是如此。

总结

在Java中,函数的形参和实参的传递有两种方式:传值和传引用。传值是指将实参的值拷贝一份传递给函数的形参,修改形参的值不会影响到实参的值;传引用是指直接将实参的地址传递给函数的形参,对形参的修改会直接影响到实参的值。需要注意的是,传递引用类型时实参所指向的对象本身不会被修改。