为什么array = array1等于array1 = array?

时间:2017-10-25 14:22:37

标签: java arrays sorting

我尝试检查传递的数组是否已排序:

public static boolean isSorted(int[] list){
    boolean isSorted = true;
    int[] arr = list;
    selectionSort(arr);

    for (int i = 0; i < list.length; i++) {
        if (arr[i] != list[i]){
            isSorted = false;
            break;
        }


        }
     return isSorted;
    }

我传递了数组list并使数组arr等于list,发生的事情是数组list在排序后变得等于数组arr

什么是Java规则?以及如何将arrlist分开?

2 个答案:

答案 0 :(得分:4)

int[] arr = list;不复制数组,只是声明一个指向同一个数组实例的变量。

您需要使用int[] arr = list.clone();int[] arr = Arrays.copyOf(arr, 0, arr.length);

但请注意,您不需要对数组进行排序以检查它是否已排序:只需检查每个元素以查看以下元素是否更小。

for (int i = 0; i < arr.length - 1; ++i) {
  if (arr[i + 1] < arr[i]) return false;
}
return true;

答案 1 :(得分:0)

int[] arr = list;

以上行不会将list复制到arr,因为在java中,您可能有不同的结构来保存相同的数据,但在后端,它们都引用相同的数据对象。对arr中的数据所做的更改也会显示在list数据中,因为它们都引用了相同的数据。