Java函数参数的传递方式及规则
发布时间:2023-11-22 12:05:14
在Java中,函数的参数传递方式有两种:传值和传引用。具体的传递规则会受到参数类型的影响。
1. 传值方式:
当参数的类型为基本数据类型时,函数的参数传递是通过复制参数的值来实现的。在函数内部对参数进行修改不会影响到原始的参数值。
例如:
public void changeValue(int value) {
value = 10;
}
int num = 5;
changeValue(num);
System.out.println(num); // 输出结果为5,参数值未改变
2. 传引用方式:
当参数的类型为引用数据类型时,函数的参数传递是通过复制参数的引用来实现的。在函数内部对参数进行修改会影响到原始的参数值。
例如:
public void changeArray(int[] array) {
array[0] = 10;
}
int[] nums = {1, 2, 3};
changeArray(nums);
System.out.println(nums[0]); // 输出结果为10,参数值被修改
需要注意的是,虽然引用数据类型的参数传递方式是传引用,但是在函数中对参数进行重新赋值是不会改变原始参数的引用的。
例如:
public void changeReference(StringBuilder str) {
str = new StringBuilder("Hello"); // 改变了参数的引用
str.append(" World");
}
StringBuilder sb = new StringBuilder("Java");
changeReference(sb);
System.out.println(sb.toString()); // 输出结果为"Java",参数引用未改变
此外,针对引用数据类型的参数传递方式还可以通过改变参数对象内部的属性值来实现对原始参数的修改。
例如:
public void appendStr(StringBuilder str) {
str.append(" World");
}
StringBuilder sb = new StringBuilder("Hello");
appendStr(sb);
System.out.println(sb.toString()); // 输出结果为"Hello World",参数对象内部属性值被修改
在函数调用时,参数传递方式也会影响到函数的重载。
例如,对于以下函数:
public void printValue(int value) {
System.out.println(value);
}
public void printValue(String str) {
System.out.println(str);
}
public void printValue(int[] array) {
System.out.println(Arrays.toString(array));
}
如果调用printValue方法时传入的参数为整型,那么会调用 个printValue方法;
如果传入的参数为字符串,会调用第二个printValue方法;
如果传入的参数为整型数组,会调用第三个printValue方法。
总的来说,Java中的函数参数传递方式是通过值传递,但对于引用数据类型来说,实际传递的是引用的副本,而不是引用本身。函数对参数的修改会影响到原始参数的值,但对参数的重新赋值或改变引用不会影响到原始参数。
