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