我们来看看上面是值传递和引用传递
首先要知道基本数据类型的值以及引用类型的引用是存放在栈中的,引用类型实际的数据是存放在堆中的
对于8大基本数据类型(四整型2浮点1Char1booelan),值传递,意思是直接将值在栈中再复制一份,然后把复印的那份直接传给形参,所以你不管怎么操作都是对形参进行操作,与实参无关。
对于引用类型为什么说是值传递,我贴个网上看到的代码
class Student { private float score; public Student(float score) { this.score = score; } public void setScore(float score) { this.score = score; } public float getScore() { return score; } } public class ParamTest { public static void main(String[] args) { Student a = new Student(0); Student b = new Student(100); System.out.println("交换前:"); System.out.println("a的分数:" + a.getScore() + "--- b的分数:" + b.getScore()); swap(a, b); System.out.println("交换后:"); System.out.println("a的分数:" + a.getScore() + "--- b的分数:" + b.getScore()); } public static void swap(Student x, Student y) { Student temp = x; x = y; y = temp; } }
【运行结果】:
交换前:
a的分数:0.0--- b的分数:100.0
交换后:
a的分数:0.0--- b的分数:100.0
这就是个正确的能说明引用类型也是值传递的例子,java的引用类型在传递参数的过程中实际上是将引用在栈上拷贝一份,然后传递形参,所以传递的是引用的拷贝不是引用本身,你们可能会想着不是一样吗,就上面这个例子再看一遍,如果传递的是引用本身是不是两者就真的能换过来了。
下面这篇博文解释了为什么我们会误认为java是引用传递
https://www.cnblogs.com/wchxj/p/8729503.html