Fork me on GitHub

十二.参数传值机制(干货)

4.11 参数传值机制

Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。 也就是说,我们得到的是“原参数的复印件,而不是原件”。因此,复印件改变不会影响原件。

基本数据类型参数的传值

传递的是值的副本。 副本改变不会影响原件。

引用类型参数的传值

传递的是值的副本。但是引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味着原参数指向对象的值也发生了改变”。

下面我来看一组实例:

先写一个User对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class User{
int id;
String name;
String pwd;

//无参构造
public User() {
}

//带两个参数的构造
public User(int id, String name) {
this.id = id;
this.name = name;
}

public void testParameterTransfer01(User u){
u.name="风清扬";
}

public void testparametertransfer02(User u){
u = new User(200,"东方不败");
}
}

在写一个测试值传递的类(里面掉了user的方法):

1
2
3
4
5
6
7
8
9
10
11
12
public class Y_01_测试值传递 {
public static void main(String[] args) {
User user = new User(100,"张三丰");
System.out.println(user.name);

user.testParameterTransfer01(user);
System.out.println(user.name);

user.testparametertransfer02(user);
System.out.println(user.name);
}
}

我们来分析一下:

image
image

image

image