为什么在下面的QuickSortAlgo方法中使用了修改后的double []变量'arr',而不是我们最初输入的arr []?

时间:2019-03-20 13:37:28

标签: java arrays scope

我是编程新手,我试图在java上实现Quicksort。我的代码似乎运行正常。但是有些事情我无法理解。称为“分区”的静态方法(如下面的代码片段所示)将返回一个“ int”类型的变量并处理数组“ arr”。现在,当我使用输入将其称为“ arr”来调用QuickSortAlgo方法时,为什么在QuickSortAlgo方法内部使用的这个“ arr”数组是操纵/修改后的数组(在方法“ partition”中进行了修改)?当方法'partition'结束时,不应忘记数组'arr'(在分区中修改),因为方法'partition'仅返回'int'?

public static double[] QuickSortAlgo(double arr[],int low, int high){
            if(low<high){
                int pi=partition(arr,low,high);
                QuickSortAlgo(arr, low, pi-1);  // Before pi
                QuickSortAlgo(arr, pi+1, high); // After pi
            }

1 个答案:

答案 0 :(得分:1)

这里:

public static double[] QuickSortAlgo(double arr[],int low, int high){

您的方法QuickSortAlgo()(例如,最好命名为runQuicksort())会收到一个引用,它指向一个双精度值数组。

然后传递该引用:

int pi=partition(arr,low,high);

这意味着:两种方法都“看到”内存中的相同对象(双精度数字数组)。内存中只有一件事,partition()的返回类型与此无关。

因此,除非partition()首先创建一个NEW数组并从传递给它的数组中复制内容,否则它只能在所在的相同内存区域中正常工作 “。

除此之外,您可能想了解pass by value for java references