2013-05-09 58 views
1

我正在評估一個練習題,我只是想知道程序如何得出答案---> 2 1 我很難理解主要驅動程序呼叫。我瞭解這些方法的用法。需要幫助瞭解程序執行情況

的代碼是:

public class Test { 
    public static void main(String[] args) { 
    int[] x = {1, 2, 3, 4, 5}; 
    increase(x); 

    int[] y = {1, 2, 3, 4, 5}; 
    increase(y[0]); 
    System.out.println(x[0] + " " + y[0]); 
    } 
    public static void increase(int[] x) { 
    for (int i = 0; i < x.length; i++) 
     x[i]++; 
    } 
    public static void increase(int y) { 
    y++; 
    } 
} 
+0

研究變量的範圍並傳遞值。 – 2013-05-09 18:11:52

+2

向我們解釋你所知道的以及你認爲它應該如何工作。 – 2013-05-09 18:11:54

回答

1

一個Java方法接收傳遞的值的拷貝,在原始的,或引用的副本的情況下,在一個對象類型的情況下。 increase(int[])接受一個數組(這是一個引用類型),並增加該數組中的每個值。該方法接收數組引用的副本,但不會更改它。它只是增加陣列中的每個元素,這與您發送的陣列相同。

increase(int)它有點不同。 y變量是您傳入的值的副本。當您增加y時,您只是遞增該副本。原始值不會更改。所以外觀是你傳入的價值實際上沒有變化。因此,輸出將是2 1

0

增加(x),您傳遞數組的引用,因此增量實際上增加了實際值。而在第二種情況下,您正在傳遞數組的特定值並增加它並不會真正影響數組中保存的值。欲瞭解更多信息,Check out the answer here

4

該代碼演示(有效)通過引用(在第一個增加方法)和按值調用(在第二個增加方法)之間的區別。實際上,這兩種方法都使用按值調用,但在第一種情況下,該值是對對象(數組)的引用,而第二種情況下是一個int(數組中的單個值)。

代碼int[] x = {1, 2, 3, 4, 5}創建一個數組。當你呼叫增加(x)時,你正在調用第一個增加方法。該方法遍歷數組的元素並遞增每個元素。行x[i]++相當於x[i] = x[i] + 1。結果存儲回數組。在此調用結束時,該陣列現在包含{2, 3, 4, 5, 6}。因此x[0]2

在第二呼叫到increase(int y)我們不陣列中傳遞,但值的y[0](即1)。該方法遞增變量y,但該方法以外沒有任何效果。在Java中,當你傳遞一個變量時,它通過值傳遞,這實際上意味着傳遞了一個值的副本。對該值進行的任何更改都不會影響原始值。

當您傳遞數組時,您將傳遞對數組對象的引用。引用無法更改,但可以更改對象的內容(數組內容)。

我不得不承認這有點令人困惑,但重新閱讀我已經寫了幾次,希望你會得到它!

+0

非常感謝你!我設法理解了第一次增加(x)的呼叫,但第二次增加(int y)的呼叫讓我很困惑。我現在明白了,一定會一遍又一遍地重新閱讀以完全理解它。再次感謝! – user2045470 2013-05-09 18:21:42