为什么说java只有值传递

我们来看看上面是值传递和引用传递

首先要知道基本数据类型的值以及引用类型的引用是存放在堆中的,引用类型实际的数据是存放在栈中的

对于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


猜你喜欢

转载自blog.csdn.net/qq646040754/article/details/80986703
今日推荐