1. 基本类型的参数传递
当你将基本类型作为参数传递给方法时,传递的是该基本类型的值的副本。对这个副本的修改不会影响原始变量。
public class Main {
public static void main(String[] args) {
int number = 10;
System.out.println("Before method call: " + number); // 输出: 10
modifyValue(number);
System.out.println("After method call: " + number); // 输出: 10
}
public static void modifyValue(int num) {
num = num + 5; // 这里修改的是 num 的副本
}
}
输出结果:
Before method call: 10
After method call: 10
在这个例子中:
number
的值为10
,并被作为参数传递给modifyValue
方法。- 在
modifyValue
方法中,num
是number
的副本,修改num
不会影响number
,因此number
仍然保持为10
。
2. 引用类型的参数传递
当你将引用类型作为参数传递给方法时,传递的是对象的引用(内存地址)的副本。这意味着对这个引用的修改会影响原始对象。
public class Main {
public static void main(String[] args) {
Person person = new Person("Alice");
System.out.println("Before method call: " + person.getName()); // 输出: Alice
modifyName(person);
System.out.println("After method call: " + person.getName()); // 输出: Bob
}
public static void modifyName(Person p) {
p.setName("Bob"); // 这里修改的是引用指向的对象
}
}
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
输出结果:
Before method call: Alice
After method call: Bob
在这个例子中:
person
对象的引用被作为参数传递给modifyName
方法。- 在
modifyName
方法中,p
引用指向与person
相同的Person
对象,因此对p
的修改(调用setName("Bob")
)会影响原始对象person
,导致person.getName()
返回Bob
。
总结
- 基本类型:传递的是值的副本,修改副本不会影响原始变量。
- 引用类型:传递的是对象引用的副本,修改引用指向的对象会影响原始对象。
这就是基本类型和引用类型在参数传递中的主要区别。