在Java中,参数传递主要有两种方式:值传递(Pass by Value)和引用传递(Pass by Reference)。理解这两种传递方式对于掌握Java编程至关重要。
值传递(Pass by Value)
概念解释:
值传递是指在调用方法时,实际参数的值被复制给形式参数。方法内部对形式参数的修改不会影响到实际参数。
编程示例:
public class PassByValueExample {
public static void main(String[] args) {
int x = 10;
System.out.println("Before method call: x = " + x);
modifyValue(x);
System.out.println("After method call: x = " + x);
}
public static void modifyValue(int num) {
num = 20;
System.out.println("Inside method: num = " + num);
}
}
输出结果:
Before method call: x = 10
Inside method: num = 20
After method call: x = 10
解释:
- 在
main方法中,变量x的值是10。 - 调用
modifyValue(x)时,x的值10被复制给形式参数num。 - 在
modifyValue方法内部,num被修改为20,但这不会影响到main方法中的x。 - 因此,
main方法中的x仍然是10。
引用传递(Pass by Reference)
概念解释:
在Java中,对象的引用是通过值传递的。这意味着在调用方法时,实际参数(对象引用)的值被复制给形式参数。方法内部对形式参数所指向的对象的修改会影响到实际参数所指向的对象。
编程示例:
public class PassByReferenceExample {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
System.out.println("Before method call: " + person);
modifyPerson(person);
System.out.println("After method call: " + person);
}
public static void modifyPerson(Person p) {
p.setName("Bob");
p.setAge(25);
System.out.println("Inside method: " + p);
}
}
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;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
输出结果:
Before method call: Person{name='Alice', age=30}
Inside method: Person{name='Bob', age=25}
After method call: Person{name='Bob', age=25}
解释:
- 在
main方法中,创建了一个Person对象,并将其引用赋值给变量person。 - 调用
modifyPerson(person)时,person的引用值被复制给形式参数p。 - 在
modifyPerson方法内部,通过p修改了Person对象的属性(name和age)。 - 由于
p和person指向同一个Person对象,因此对Person对象的修改会影响到main方法中的person。
总结
- 值传递:基本数据类型(如
int、float、boolean等)的参数传递方式。方法内部对形式参数的修改不会影响到实际参数。 - 引用传递:对象引用的参数传递方式。方法内部对形式参数所指向的对象的修改会影响到实际参数所指向的对象。
2万+

被折叠的 条评论
为什么被折叠?



