可以结合我的另外一篇笔记观看,不足之处请评论指正,非常感谢.
https://blog.csdn.net/qq_46552655/article/details/114990628?spm=1001.2014.3001.5501
- 首先需要声明的是,Java中给方法形参传递值的机制是值传递。对,没有说错,就是值传递。
- 基本数据类型:给方法形参传递基本数据类型时是值传递,很容易理解。看图看代码:
public class BasicValueTransport {
public static void main(String[] args) {
int num1=10;
int num2=20;
swap(num1,num2);
System.out.println(num1);
System.out.println(num2);
}
public static void swap(int a,int b){
int temp=a;
a=b;
b=temp;
System.out.println(a);
System.out.println(b);
}
}
输出结果:
20
10
10
20
结果发现,仅方法内部两个形参的值发生了交换,而对于原来的数据num1和num2并没有影响.
这里传给形参a,b的值分别就是num1的拷贝和num2拷贝,所以在方法内部交换两个形参的值并不会影响原来数据的值,num1的值还是10,num2的值还是20.
3.引用数据类型: 那么传递引用数据类型的参数时是值传递还是引用传递?这个问题有极其普遍的误解现象,需要再次明确,这里仍旧是值传递,只不过传递的值就是引用值拷贝(地址值的拷贝) .举例阐述:
public class ClassValueTest {
public static void main(String[] args) {
Person man = new Person(13);
Person woman=new Person(22);
swap(man,woman);
System.out.println(man.getAge());
System.out.println(woman.getAge());
}
public static void swap(Person a,Person b){
Person temp=a;
a=b;
b=temp;
System.out.println(a.getAge());
System.out.println(b.getAge());
}
}
结果:
22
13
13
22
假如是引用传递,则输出的结果应该如下,但事实不是这样
22
13
22
13
如果是引用传递,传递过程如下图:
按照上图的分析,如果是引用传递,则man和woman指向的地址发生了改变,即指向了另外一个对象,但从代码结果得知事实并不是这样的.
正确的理解为: 引用变量man和woman将拷贝的引用地址值传递给了形参,而这两个拷贝的地址值在方法中进行了交换,但并没有影响变量man和woman的的引用.如图:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)