什么是值传递
值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
示例引入
猜一猜下列程序运行的输出是什么?
import com.company.desgine.SingleInstance;
import com.company.forTest.Student;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
SingleInstance instance = SingleInstance.getInstance();
Student a = new Student();
Student b = new Student();
a.setName("zhangsan");
b.setName("lisi");
System.out.println(a);
System.out.println(b);
swap1(a,b);
System.out.println(a);
System.out.println(b);
swap(a,b);
System.out.println(a);
System.out.println(b);
int c =10;
int d=20;
Integer e =10;
Integer f=20;
swap(c,d);
System.out.println(c);
System.out.println(d);
swap(e,f);
System.out.println(e);
System.out.println(f);
}
private static void swap1(Student e, Student f) {
String name = e.getName();
e.setName(f.getName());
f.setName(name);
}
private static void swap(Student e, Student f) {
Student a= e;
e=f;
f=a;
}
private static void swap(int a, int b) {
int c =a;
a=b;
b=c;
}
private static void swap(Integer a, Integer b) {
Integer c =a;
a=b;
b=c;
}
}
结果如下:
第一次输出:
第二次输出
传入方法参数,新引入栈针,调用get、set方法完成后a’和b’ 、name出栈,可交换。
第三次输出
e,f 出栈后不影响原内容指向
第四、五次输出
基本类型,直接在栈里分配
swap的操作都是对红框内容的操作,不影响原有值,
总结
java中全部都是值传递