java私有成员通过引用调用

时间:2016-10-03 09:41:01

标签: java

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]?

我知道参数是通过引用或地址传递的。

在一个函数中,我如何通过值传递?

1 个答案:

答案 0 :(得分:2)

  

在一个函数中,我如何通过值传递?

Java 始终按值传递,从不传递引用(请参阅this question and its answers)。在您的示例中传递的值是指向数组的对象引用 1

您的问题与传值和传递引用无关,它与您将对象引用(值为值)传递给方法的事实有关。这使得该方法可以访问引用所引用的对象。所以很自然它可以修改那个对象的状态;在您的情况下,它可以修改存储在数组的索引0处的内容。

另外,您获取该对象引用的实例变量(字段)是private并不重要;代码inSort.print(sort.arr);位于Sorting类中,因此它可以访问sort.arr,读取其值(对象引用),并将该值(对象引用)传递给方法。

1 重要的是要意识到“对象引用”和“引用传递”中的“引用”一词是在讨论两个非常不同的东西。在“对象引用”中,它讨论的是对象的引用(指向它的指针)。在“pass-by-reference”中,它讨论的是对变量的引用(指针)。 Java没有pass-by-reference。