Java函数--参数传递的方式及其示例
发布时间:2023-12-10 03:38:00
Java中参数传递的方式有两种:值传递和引用传递。
1. 值传递:
值传递是指将参数值的副本传递给方法中的参数。在方法内部修改参数的值不会影响到原始变量的值。Java中的基本数据类型(byte、short、int、long、float、double、char、boolean)都是以值传递的方式进行参数传递。
示例1:基本数据类型的值传递
public class ValuePassing {
public static void main(String[] args) {
int num = 10;
System.out.println("调用方法之前的num的值:" + num);
changeValue(num);
System.out.println("调用方法之后的num的值:" + num);
}
public static void changeValue(int n) {
n = 20;
System.out.println("方法内部修改后的n的值:" + n);
}
}
在上述示例中,方法changeValue接受一个int类型的参数n,将参数n的值修改为20。但是在main方法中输出num的值时,发现num的值并没有被改变。
2. 引用传递:
引用传递是指将参数的引用(内存地址)传递给方法中的参数,方法中的参数和传递进来的参数指向同一块内存地址。在方法内部修改参数的值会影响到原始变量的值。Java中的数组、字符串和对象都是以引用传递的方式进行参数传递。
示例2:引用类型的引用传递
public class ReferencePassing {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println("调用方法之前的arr数组:" + Arrays.toString(arr));
changeArray(arr);
System.out.println("调用方法之后的arr数组:" + Arrays.toString(arr));
}
public static void changeArray(int[] array) {
array[0] = 10;
array[1] = 20;
array[2] = 30;
System.out.println("方法内部修改后的array数组:" + Arrays.toString(array));
}
}
在上述示例中,方法changeArray接受一个int类型的一维数组参数array,将数组的前三个元素修改为10、20和30。在main方法中输出arr数组的值时,发现arr数组的值也发生了变化。
再举一个示例,演示字符串的引用传递:
public class ReferencePassing {
public static void main(String[] args) {
String str = "Hello";
System.out.println("调用方法之前的str字符串:" + str);
changeString(str);
System.out.println("调用方法之后的str字符串:" + str);
}
public static void changeString(String s) {
s = "World";
System.out.println("方法内部修改后的s字符串:" + s);
}
}
在上述示例中,方法changeString接受一个String类型的参数s,将参数s的值修改为"World"。但是在main方法中输出str的值时,发现str的值并没有被改变。
需要注意的是,虽然参数传递方式有值传递和引用传递之分,但Java中的一些数据类型(例如String)在使用时更像是值传递,虽然传的是引用,但对它的修改并不会改变原始变量的值。这是因为String是不可变的(immutable)对象,当对String对象进行修改时,实际上是创建了一个新的String对象。
