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
相关产品推荐
相关产品推荐

