Java 中的参数传递是值传递呢?还是引用传递?

首先说结论:Java 中的参数传递是值传递:
看下面第一个例子:
我们将a(基本数据类型int)当作参数
Java 中的参数传递是值传递呢?还是引用传递?_第1张图片

可以看到:实参并没有改变

因为基本数据类型是存在在栈中的,在传参时,会将数据创建一个副本同样放入栈中,这个副本改变了,而我们的实参并没有改变,这符合值传递
Java 中的参数传递是值传递呢?还是引用传递?_第2张图片
再看第二个例子:
Java 中的参数传递是值传递呢?还是引用传递?_第3张图片

这里我没有重写tostring方法,结果如下,可以看到, 形参和实参是一样的
在这里插入图片描述
那么可能有小伙伴质疑java不是值传递,我们看下图:

对象的引用存放在栈中,而我们的对象存放在堆中

在传参过程中,同例子1一样,会在f方法中创建一个副本,这个副本同样指向堆中的同一对象

实参指向的对象其实没有变,而我们又把name值给改了,就好像是对象改变了,实际没有变

还是符合值传递的
Java 中的参数传递是值传递呢?还是引用传递?_第4张图片
再看第三个例子:我们直接在方法中重新new一个新的对象
Java 中的参数传递是值传递呢?还是引用传递?_第5张图片
结果如下
在这里插入图片描述
此时形参和实参又不一样的,其实原理是一样的:
我们在new的过程中,将副本指向了新的对象而已
实参的指向从未发生过改变,符合值传递
Java 中的参数传递是值传递呢?还是引用传递?_第6张图片

你可能感兴趣的:(Java基础,java)