*Java函数参数传递的方式*
发布时间:2023-05-28 06:03:50
在Java中,有两种传递函数参数的方式:传递值和传递引用。
1. 传递值
当传递基本类型变量(如int、double)或对象的时候,都是将实参的值复制一份传递给形参,即传递的是实参的副本。这样在函数内部的操作对实参没有影响,并且在函数结束时,形参销毁,实参的值不受影响。
下面是一个例子:
public class Test {
public static void main(String[] args) {
int num1 = 10;
String str1 = "Hello";
change(num1, str1);
System.out.println(num1); //输出10
System.out.println(str1); //输出Hello
}
public static void change(int num, String str) {
num = 20;
str = "World";
}
}
在change函数中修改了num和str的值,但在main函数中输出的值仍然是原来的值,证明传递的是实参的副本。
2. 传递引用
当传递对象类型变量(如数组、类对象)时,传递的实际上是对象的引用,而不是对象本身。引用是一个指向对象存储位置的值,因此在函数内部对该对象的操作有可能改变对象本身,也就是说实参和形参指向的都是同一个对象。
下面是一个例子:
public class Test {
public static void main(String[] args) {
int[] nums = {1, 2, 3};
change(nums);
System.out.println(nums[0]); //输出10
}
public static void change(int[] arr) {
arr[0] = 10;
}
}
在change函数中修改了nums数组的 个元素的值,通过在main函数中输出可以看到nums[0]的值已经改变,证明传递的是引用。
总结来说,当传递基本类型变量或对象时,传递的方式不同,需要注意是否会影响实参的值。需要传递对象时, 使用深拷贝或者序列化的方式将对象复制一份再传递,避免因为引用的改变而导致问题。
