爲什麼Java只有值傳遞

文章優先發布在個人博客,後續如果修改忘記同步到CSDN給你帶來不便,抱歉。
個人博客本文地址:https://www.xdx97.com/article?bamId=671021641165176832



其實我在學Java的時候對值傳遞地址值傳遞這兩個概念沒啥感覺
也可能是我自己沒太注意,但是在學習c語言的時候對這兩個概念倒是印象深刻


下面就我對這兩個概念的理解來闡述一下:爲什麼Java只有值傳遞

1、什麼是形參什麼是實參

    // 這個參數xdx 就是形參
    public void fun(XdxTest xdx){
        System.out.println("say : " + xdx);
    }

    public static void main(String[] args) {
        XdxTest t = new XdxTest();
        // 這個地方傳遞的t 就是實參
        t.fun(t);
    }

2、什麼是值傳遞什麼是地址值傳遞

值傳遞:形參所作的任何改變都不會對實參有任何影響。

你可以這樣理解,我有一把鑰匙,然後我配了一把,我把配的一把給你了。
你對我給你的鑰匙做任何操作,比如折斷。對於我手裏的鑰匙是沒有任何影響的。


地址值傳遞:形參做任何操作都會影響到實參的。

我直接把原配的鑰匙給了你,如果你把它折斷的話,對我肯定有影響啦。


3、Java中的引用傳遞

通過上面的解釋我們很容易就理解的值傳遞地址值傳遞,我們常說Java中只有值傳遞,但是爲什麼在Java中我們對形參做改變的時候(比如重新賦值),對實參還是有影響呢?

比如下面這個代碼:

public class XdxTest {
    private int count = 1;
    // 這個參數xdx 就是形參
    public void fun(XdxTest xdx){
        xdx.count = 2;
    }
    public static void main(String[] args) {
        XdxTest t = new XdxTest();
        System.out.println(t.count);
        // 這個地方傳遞的t 就是實參
        t.fun(t);
        System.out.println(t.count);
    }
}

# 打印結果
1
2

我們傳遞過去的參數,不是當前對象,而是該對象的一個引用,它也是指向當前對象的。

對象和對象的引用:一個對象可以有多個引用,對於和對象的引用就像氣球和繩子之前的關係一樣。

所以我們對這個對象的引用做的任何操作當然會反應到對象本身呀。

但是如果我們在方法裏面,讓這個對象引用指向其它對象,這時候再對引用做任何操作就不會對實參有任何改變了。這也就證明了Java裏面的引用傳遞本質上還是值傳遞

public class XdxTest {
    private int count = 1;
    // 這個參數xdx 就是形參
    public void fun(XdxTest xdx){
        xdx = new XdxTest();
        xdx.count = 2;
    }
    public static void main(String[] args) {
        XdxTest t = new XdxTest();
        System.out.println(t.count);
        // 這個地方傳遞的t 就是實參
        t.fun(t);
        System.out.println(t.count);
    }
}

打印結果:
1
1


可以關注我的個人公衆號,一起成長噢:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章