2016-10-03 35 views
0
class insertionSort 
{ 
    public void print(int arr[]) 
    { 
     arr[0]=999999999; 
    } 
} 

public class Sorting 
{ 
    private int[] arr= {0,56,8,75,45,21,68,9,54,2,65,87,52,65,8,5,20,0,2,2}; 

    public static void main(String[] arg) 
    { 
     Sorting sort = new Sorting(); 
     insertionSort inSort = new insertionSort(); 
     inSort.print(sort.arr); 
     System.out.println(sort.arr[0]); 
    } 
} 

儘管Sort.arr是一個私有變量,爲什麼inSort對象能夠操作arr [0]?java私人會員通過引用調用

我知道參數是通過引用或地址傳遞的。

在一個函數中,我怎麼能通過值?

+0

輸出結果是:999999999 – enamel

+0

Java總是按值傳遞,但是'arr'是一個引用,並且此引用是按值傳遞的。您不會複製陣列。 –

+0

但原始的排序對象arr []值已更改。 – enamel

回答

2

在一個函數中,我怎麼能通過值?

Java是總是傳遞的價值,絕對不能通過按引用(見this question and its answers)。在您的示例中傳遞的值是指向該數組的對象引用。

你的問題與傳遞值與傳遞引用無關,它與你傳遞一個對象引用(這是一個值)到方法中的事實有關。這使該方法可以訪問引用所引用的對象。自然它可以修改該對象的狀態;在你的情況下,它可以修改存儲在數組索引0處的內容。

另外,您獲取該對象引用的實例變量(字段)的值是private;代碼inSort.print(sort.arr);位於Sorting類中,因此它有權訪問sort.arr,讀取其值(對象引用),並將該值(對象引用)傳遞到方法中。


它認識到單詞「參考」中的「對象引用」和「傳遞按引用」在談論兩個非常不同的東西是很重要的。在「對象引用」中,它是指對對象的引用(指向它的對象)。在「傳遞參考」中,它是在談論一個參考(指針)到變量。 Java沒有傳遞引用。