You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中仅排序一个数组却导致两个数组均被排序的问题咨询

问题原因与解决方法

问题根源

你写的int[] rojas = list;并没有复制数组,只是让rojas和list引用了同一个数组对象。在Java中,数组属于引用类型,赋值操作传递的是对象的引用,而非整个数组的副本。所以调用Arrays.sort(rojas)时,实际是对两个变量共同指向的数组排序,自然打印list时也会显示排序后的结果。

正确的数组复制方式

要生成独立的数组副本,可使用以下几种方法:

方法1:使用Arrays.copyOf()

这是最简洁的方式,直接指定原数组和新数组长度:

int[] rojas = Arrays.copyOf(list, list.length);

方法2:使用System.arraycopy()

底层复制方法,需指定源数组、源起始位置、目标数组、目标起始位置和复制长度:

int[] rojas = new int[list.length];
System.arraycopy(list, 0, rojas, 0, list.length);

方法3:手动循环复制

适合理解底层逻辑,逐个元素赋值:

int[] rojas = new int[list.length];
for (int i = 0; i < list.length; i++) {
    rojas[i] = list[i];
}

修改后的完整代码

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] list = {611, 700, 777, 901, 4124, 8000, 9014, 6213113, 15, 19, 100, 102, 150, 177, 310, 330, 400, 590, 600};

        // 复制数组生成独立副本
        int[] rojas = Arrays.copyOf(list, list.length);

        int size = 20;
        int value = 100;

        for (int i=0 ;i< size-1; i++){
            if(list[i] == value){
               System.out.println("Element found index is :"+ i);
               break;
            } else {
               System.out.println("Element not found");
            }
        }

        Arrays.sort(rojas);
        System.out.println("element found by binary search is in index: " + Arrays.binarySearch(rojas,100));

        System.out.println(Arrays.toString(rojas));
        System.out.println(Arrays.toString(list));
    }
}

修改后,rojas是独立的数组副本,排序rojas不会影响原list数组。

内容的提问来源于stack exchange,提问作者tiziano budano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:05:33