Java的值传递
1. 形参和实参
- 实参(实际参数) :用于传递给函数/方法的参数,必须有确定的值。
- 形参(形式参数) :用于定义函数/方法,接收实参,不需要有确定的值
2. 值传递和引用传递
- 值传递 :方法接收的是实参值的拷贝,会创建副本。
- 引用传递 :方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参
3. Java的值传递
/*
用于说明java是值传递
*/
public static void main(String[] args) {
int a = 0;
System.out.println(a);
method1(a);
System.out.println(a);
User zhangsan = new User("zhangsan");
User lisi = new User("lisi");
method2(zhangsan, lisi);
System.out.println("zhangsan:"+zhangsan.getName());
System.out.println("lisi:"+lisi.getName());
}
//传递基本数据类型
public static void method1(int num){
num = 1;
System.out.println("num:"+num);
}
//传递引用数据类型
public static void method2(User person1, User person2){
User person3 = person1;
person1 = person2;
person2 = person3;
System.out.println("person1:"+person1.getName());
System.out.println("person2:"+person2.getName());
}
运行结果:
0
num:1
0
person1:lisi
person2:zhangsan
zhangsan:zhangsan
lisi:lisi
4. 结论
1. 在传递基本数据类型时,明显时值传递,形参会创建副本,对形参的操作,都是在这个副本上进行的
2. 在传递引用数据类型时,我们会错误的认为是引用传递,但其实依旧是值传递,只不过传递的是实参的地址罢了
在上面的例子中,形参只是把里面地址的值换了,并没有影响实参,可见是值传递;实参指向的还是那个空间地址