一、基本概念
参数类型:
形参:方法被调用时需要传递进来的参数,例如:function(int a)中的a,他只有func被调用期间a才有意义,也就是被分配内存空间,在方法function方法被执行完后,a就会被销毁释放内存空间,也就不存在了
实参:方法被调用时传递进来的实际值,他在方法被调用前就已经被初始化,并且在方法被调用时传入。
值传递和引用传递
值传递:在方法被调用时,实参通过把他的内容副本传入方法内部,此时形参接收的内容是实参的一个拷贝,因此在方法内对实参的任何操作,都仅仅是对这个内容的副本进行操作,不影响原初始值的内容。值传递传递的是一个真实内容的副本,对副本的操作不影响原内容,也就是形参怎么变化,不影响实参对应的内容。
引用传递:"引用”也就是指向真实内容的地址值。在方法调用时,实参的地址通过方法调用被传递给相应的形参,在方法体内,形参和实参指向同一块内存地址,对形参的操作会影响原来的内容。
我们可以看一下代码:
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;
}
结果:
Student{name='zhangsan'}
Student{name='lisi'}
Student{name='lisi'}
Student{name='zhangsan'}
Student{name='lisi'}
Student{name='zhangsan'}
10
20
10
20
1,swap1(Student e, Student f) 方法实现互换,结束后,e ,f , name都出栈

2,swap(Student e, Student f)方法未实现互换,结束后,e ,f , name都出栈

3,swap(int a, int b) 方法未实现 c d互换,只是单纯实现了方法里的a ,b 互换,方法完成后出栈,对 c d 无影响

4,swap(Integer a, Integer b)方法未实现,同上,只是单纯实现了方法里的a ,b 互换,方法完成后出栈,对 c d 无影响
结论:java 只有值传递
|