- 基本数据类型(值传递)特点:
传递的是变量的值的副本。
函数内部对参数的修改不会影响原始变量。
示例:1
2
3
4
5
6
7
8
9
10
11
12public class Main {
public static void modifyValue(int x) {
x = 10;
System.out.println("函数内: " + x);//输出10
}
public static void main(String[] args) {
int a = 5;
modifyValue(a);
System.out.println("函数外: " + a);//输出5
}
}
- 对象类型(引用值的传递)特点:
传递的是对象的引用的副本(即内存地址的副本)。
函数内部可以通过引用修改对象的属性,但不能改变原始引用指向的对象。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class MyObject {
int value;
}
public class Main {
public static void modifyObject(MyObject obj) {
obj.value = 10; // 修改对象的属性
System.out.println("函数内: " + obj.value);//输出10
}
public static void main(String[] args) {
MyObject myObj = new MyObject();
myObj.value = 5;
modifyObject(myObj);
System.out.println("函数外: " + myObj.value);//输出10
}
} - 对象引用本身不可修改
虽然可以通过引用修改对象的属性,但不能改变原始引用指向的对象。函数内 obj 被重新赋值,但这不会影响 myObj 的引用。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18class MyObject {
int value;
}
public class Main {
public static void changeReference(MyObject obj) {
obj = new MyObject(); // 试图改变引用
obj.value = 20;
System.out.println("函数内: " + obj.value);//输出20
}
public static void main(String[] args) {
MyObject myObj = new MyObject();
myObj.value = 5;
changeReference(myObj);
System.out.println("函数外: " + myObj.value);//输出5
}
}