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]?
我知道参数是通过引用或地址传递的。
在一个函数中,我如何通过值传递?
答案 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。