這題不會!別說你懂值傳遞與引用傳遞

閱讀原文:這題不會!別說你懂值傳遞與引用傳遞java

即便工做過一階段的人也不必定可以理解Java是值傳遞仍是引用傳遞。若不信,那麼來看看下面這道題。數組

題目

請先寫出你的答案,而後對比下輸出結果。bash

public class Test {
    private String str = new String("碼上實戰");
    private char[] chars = {'星', '期', '一'};
    private int num = 2019;


    private void change(String cStr, char[] cChars, int cNum) {
        cStr = "歡迎關注->碼上實戰";   //第一步
        cChars[2] = '二';             //第二步
        cNum = 2020;        //第三步
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.change(test.str, test.chars, test.num);

        System.out.println("str=" + test.str);
        System.out.println("chars=" + test.chars[0] + "," + test.chars[1] + "," + test.chars[2]);
        System.out.println("num=" + test.num);
    }
}
複製代碼
  • 輸出結果
str=碼上實戰
chars=星,期,二
num=2019
複製代碼

值傳遞仍是引用傳遞?

首先,明確的告訴你們,Java只有值傳遞,沒有引用傳遞!不管理解不理解,先記住這點。函數

概念

  • 值傳遞 方法調用時,實參的數值被複制到另外一個變量,而後傳遞複製的副本。spa

  • 引用傳遞 方法調用時,實際參數的地址直接傳遞到方法中。code

  • 對比orm

- 值傳遞 引用傳遞
區別 建立副本 不建立副本
改變 函數中沒法改變實際參數 函數中能夠改變原始實際參數
  • 注意
    這下你看清了吧,值傳遞和引用傳遞的真正區別是:傳遞時,實際參數是否複製了副本! 不要去管參數是基本類型仍是引用類型。

解題

值傳遞解題

  • 爲何char數組中改變了? 由於 實參和形參指向的是同一個數組對象,方法中改變的不是參數自己,而是改變了它所指向的對象。cdn

  • 錯誤的區分基本類型和引用類型 由題可知,不管是String仍是int,即便在方法中都進行改變,但實參都沒有改變,因此和參數什麼類型沒有關係。對象

若是你有什麼問題,歡迎留言交流。token

相關文章
相關標籤/搜索