Java函数参数传递的几种方式
Java中的函数参数传递是指把变量从一个函数作为参数传递到另一个函数或方法中,以便在调用时使用该变量的值。Java中支持多种参数传递方式,下面主要介绍以下几种常见的传递方式。
1. 值传递(传递基本数据类型)
值传递是指传递的参数是基本数据类型,包括int、float、double、boolean等。在函数中修改这些参数的值不会影响原来的变量值。例如:
public static void main(String[] args) {
int num = 5;
changeValue(num);
System.out.println(num); //输出结果为5
}
public static void changeValue(int num) {
num = num + 1;
}
在changeValue方法中修改了num的值,但是对main方法中的num没有任何影响,因为在调用changeValue方法时是将num的值拷贝给num参数的,方法中的修改不会影响原值。
2. 引用传递(传递非基本数据类型)
引用传递是指传递的参数是对象类型,包括数组、类对象等。在函数中对这些参数进行修改时,会改变原来对象中的属性值。例如:
public static void main(String[] args) {
int[] arr = {1, 2, 3};
changeValue(arr);
System.out.println(Arrays.toString(arr)); //输出结果为[2, 4, 6]
}
public static void changeValue(int[] arr) {
for(int i = 0; i < arr.length; i++) {
arr[i] *= 2;
}
}
在changeValue方法中对arr数组的元素进行了修改,main方法中的arr数组也跟着发生了变化,因为在调用changeValue方法时,实际上传递的是arr数组对象的地址。
3. 对象引用的复制
对象引用的复制是指在传递对象参数时,会把对象的引用(地址)传递给方法中的参数,而不会传递整个对象。例如:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static void main(String[] args) {
Person p1 = new Person("Tom", 20);
Person p2 = p1;
System.out.println(p1.getName()); //输出结果为Tom
System.out.println(p2.getName()); //输出结果为Tom
p2.setName("Jerry");
System.out.println(p1.getName()); //输出结果为Jerry
System.out.println(p2.getName()); //输出结果为Jerry
}
在上面代码中,将p1对象的引用传递给p2对象,修改p2的属性值时也会影响到p1对象,因为它们引用的是同一个对象。
4. 对象的传递
当传递的参数是对象时,可以将一个对象作为参数传递,也可以将对象的一个属性值作为参数传递。例如:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static void main(String[] args) {
Person p = new Person("Tom", 20);
changeValue(p);
System.out.println(p.getAge()); //输出结果为22
}
public static void changeValue(Person person) {
int age = person.getAge();
age += 2;
person.setAge(age);
}
在changeValue方法中传递的是一个Person对象的引用,修改Person对象的属性age的值,改变了原对象的属性值。
综上,Java中支持多种参数传递方式,每种方式在搭配函数过程中考虑实际需要来使用即可。在函数参数传递时,多考虑对象的引用、对象的传递、对象引用的复制等,以便更好地满足软件开发需求。
