Java参数传递:了解Java中参数传递的机制
发布时间:2023-07-06 10:35:41
Java中参数传递的机制是通过值传递(pass by value)实现的,即方法调用时实参的值被复制给形参。这里需要区分基本类型和引用类型的参数传递。
对于基本类型(如int、float等),参数传递是将实际参数的值复制一份给形式参数,在方法内部对形式参数的修改不会影响到实际参数。示例如下:
public static void changeValue(int value) {
value = value + 1;
System.out.println("形参value的值为:" + value);
}
public static void main(String[] args) {
int num = 10;
System.out.println("调用changeValue方法之前,num的值为:" + num);
changeValue(num);
System.out.println("调用changeValue方法之后,num的值为:" + num);
}
输出结果为:
调用changeValue方法之前,num的值为:10 形参value的值为:11 调用changeValue方法之后,num的值为:10
可以看到,虽然在changeValue方法中修改了形参value的值,但是并没有影响到实参num的值。
对于引用类型,传递的是引用的副本,也就是传递的是对象的地址。因此,在方法内部对引用类型参数的修改会影响到实际参数指向的对象。示例如下:
class Person {
int age;
}
public static void changeAge(Person person) {
person.age = person.age + 1;
System.out.println("形参person的age为:" + person.age);
}
public static void main(String[] args) {
Person p = new Person();
p.age = 20;
System.out.println("调用changeAge方法之前,p的age为:" + p.age);
changeAge(p);
System.out.println("调用changeAge方法之后,p的age为:" + p.age);
}
输出结果为:
调用changeAge方法之前,p的age为:20 形参person的age为:21 调用changeAge方法之后,p的age为:21
可以看到,changeAge方法中修改了形参person的age值,影响到了实参p指向的对象的age值。
需要注意的是,当引用类型参数被重新赋值时,不会影响到原来实参指向的对象。示例如下:
public static void changeReference(Person person) {
person = new Person();
person.age = 30;
System.out.println("形参person的age为:" + person.age);
}
public static void main(String[] args) {
Person p = new Person();
p.age = 20;
System.out.println("调用changeReference方法之前,p的age为:" + p.age);
changeReference(p);
System.out.println("调用changeReference方法之后,p的age为:" + p.age);
}
输出结果为:
调用changeReference方法之前,p的age为:20 形参person的age为:30 调用changeReference方法之后,p的age为:20
可以看到,虽然changeReference方法中将形参person重新赋值为一个新的Person对象,并修改了age值,但是并没有影响到实参p指向的对象。
