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

Java调用rotate方法修改数组未在main方法生效是什么原因?

问题原因
  • Java的参数传递规则为值传递,当你把数组作为参数传入rotate方法时,实际上传递的是main方法中nums数组引用的副本,而非原引用本身。
  • 你在rotate方法末尾执行的nums=Arrays.copyOf(arr, arr.length);操作,只是将方法内的局部引用副本指向了新生成的arr数组,完全没有修改main方法中原有nums引用指向的数组内容,所以main方法打印结果和原数组一致。
修复方案

将rotate方法末尾的赋值代码替换为数组内容复制逻辑,直接把计算好的旋转后的值写入原有数组对象即可:
把原有代码:

nums=Arrays.copyOf(arr, arr.length);

替换为:

System.arraycopy(arr, 0, nums, 0, nums.length);
修正后完整rotate方法代码
public static void rotate(int[] nums, int k) {
    int[] arr=new int[nums.length];
    int j=0;
    int x=k;
    for(int i=nums.length-k;i<nums.length && k>0;i++, j++) {
        arr[j]=nums[i];
        k--;
    }
    for(int i=0;i<nums.length-x;i++) {
        arr[j]=nums[i];
        j++;
    }
    // 直接修改原数组内容,而非修改局部引用指向
    System.arraycopy(arr, 0, nums, 0, nums.length);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:48:00