即便工做過一階段的人也不必定可以理解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