实现Java函数的参数传递方法
Java函数参数的传递方式主要有以下几种:传值调用、传引用调用、传地址调用、传结构体调用、变长参数调用等。
1.传值调用:
传值调用是指在调用函数时,将实参的值复制一份传递给形参,形参和实参是两个不同的变量。在函数内部对形参的任何修改都不会影响到实参本身。
举个例子:
public void test(int a){
a = 10;
System.out.print("a的值为:"+a);
}
...
int b = 5;
test(b);
//程序运行结果为:a的值为:10
在上述例子中,将b的值传递给形参a,在函数内部修改a的值为10,但是不会影响到b的值。
2.传引用调用:
传引用调用是指在调用函数时,将实参的内存地址传递给形参,形参和实参指向同一个变量,在函数内部对形参的修改会影响到实参。
举个例子:
public void test(StringBuilder sb){
sb.append("hello");
System.out.print("sb的值为:"+sb.toString());
}
...
StringBuilder sb1 = new StringBuilder("java");
test(sb1);
//程序运行结果为:sb的值为:javahello
在上述例子中,sb1的内存地址被传递到了函数中,在函数内部通过append方法修改了sb1的值为"javahello"。
3.传地址调用:
传地址调用是指在调用函数时,将实参的指针地址传递给形参,形参和实参都指向同一个地址,和传引用调用基本相同。
举个例子:
public void test(int[] arr){
arr[0] = 10;
System.out.print("arr[0]的值为:"+arr[0]);
}
...
int[] arr1 = new int[]{1,2,3};
test(arr1);
//程序运行结果为:arr[0]的值为:10
在上述例子中,arr1的指针地址被传递到了函数中,在函数内部修改了arr1[0]的值为10。
4.传结构体调用:
传结构体调用是指在调用函数时,将实参的结构体(或类)的内存地址传递给形参,形参和实参指向同一个结构体,在函数内部对形参的修改会影响到实参。
举个例子:
public class Person {
int age;
String name;
}
...
public void test(Person p){
p.age = 20;
System.out.print("p的年龄为:"+p.age);
}
...
Person person = new Person();
person.age = 10;
test(person);
//程序运行结果为:p的年龄为:20
在上述例子中,person的内存地址被传递到了函数中,在函数内部修改了person的age属性的值。
5.变长参数调用:
变长参数调用是指在调用函数时,可以传递不定长度的参数列表。在函数中可以通过遍历参数列表来进行操作。
举个例子:
public void test(int... args){
int sum = 0;
for(int i:args){
sum += i;
}
System.out.print("求和结果为:"+sum);
}
...
test(1,2,3,4,5);
//程序运行结果为:求和结果为:15
在上述例子中,test函数的参数列表可以不确定参数的个数,在函数中通过传入的参数列表求和。
以上就是Java函数参数传递的几种方式,我们可以根据实际需求来选择不同的传递方式。
