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

Java中函数的参数传递方式及详解

发布时间:2023-08-08 02:28:35

在Java中,函数的参数传递方式有两种:传值和传引用。

1. 传值:基本数据类型(int、double、char等)和String类型都是通过传值的方式进行参数传递的。这意味着传递给函数的实参是其值的一个拷贝,函数内部对形参值的修改不会影响到原始的实参值。这是因为基本数据类型和String类型在内存中以值的形式存储,不同的变量拥有各自独立的内存空间。

例如:

public void updateValue(int num) {
    num = num + 1;
}

public static void main(String[] args) {
    int value = 10;
    updateValue(value);
    System.out.println(value);  // 输出为10,值没有发生改变
}

2. 传引用:引用类型(数组、对象)通过传引用的方式进行参数传递。传递给函数的实参是其内存地址的一个拷贝,函数内部对形参对象的修改会影响到原始的实参对象。这是因为引用类型在内存中以引用的形式存储,不同的变量指向相同的内存空间。

例如:

public void updateArray(int[] arr) {
    arr[0] = 100;
}

public static void main(String[] args) {
    int[] array = {1, 2, 3};
    updateArray(array);
    System.out.println(array[0]);  // 输出为100,数组的      个元素发生了改变
}

需要注意的是,引用类型的传递仅传递了引用的拷贝,而不是传递了实际的对象。所以在函数内部修改引用本身的指向(将其指向其他对象)不会影响到原始的实参。这是因为函数内部会为形参分配一个新的内存空间(堆栈帧)。

例如:

public void updateReference(String str) {
    str = "world";
}

public static void main(String[] args) {
    String greeting = "hello";
    updateReference(greeting);
    System.out.println(greeting);  // 输出为"hello",引用本身的指向没有发生改变
}

综上所述,Java中的函数参数传递方式有传值和传引用两种。对于基本数据类型和String类型,采用传值方式传递参数,函数内部对形参修改不会影响原始值;而对于引用类型,采用传引用方式传递参数,函数内部对形参修改会影响原始对象的值,但对形参指向其他对象的修改不会影响原始的实参的指向。