System.arraycopy参数顺序为源数组、源起始位置、目标数组、目标起始位置、复制长度;按“搬运动作”逻辑记忆:从哪搬→从哪开始→搬到哪→放到哪→搬几个。

记 System.arraycopy 的参数顺序,关键不是死背,而是抓住“搬运动作”的自然逻辑:你要从哪搬、搬到哪、搬多少。
按动作流程记:源→起始→目标→起始→数量
想象自己在搬箱子:
- 源数组——你站在哪堆箱子前(src)
- 源起始位置——从这堆的第几个箱子开始搬(srcPos)
- 目标数组——你要把箱子搬到哪堆去(dest)
- 目标起始位置——放在那堆的第几个空位上(destPos)
- 搬几个——一次扛几箱,不是搬到第几个索引(length)
口诀法:源起目起量
取每个参数关键词首字,连起来读:源 起 目 起 量(谐音“原气木气亮”或“圆起木起亮”都行)。 它对应: 源数组 → 起始(源)→ 目标数组 → 起始(目标)→ 量(元素个数)
对比常见错误,强化记忆
容易写反的是前两个和中间两个,尤其重构时手滑成 arraycopy(srcPos, src, destPos, dest, length)——编译直接报错,但 IDE 提示可能不醒目。记住:
- 所有 数组引用(src 和 dest)一定在奇数位:第1、第3个参数
- 所有 位置索引(srcPos、destPos)一定在偶数位:第2、第4个参数
- 第5个参数永远是正整数或零,表示搬几个,不是下标
看 ArrayList 源码一眼确认
翻 JDK 中 ArrayList.remove(int) 的实现:
System.arraycopy(elementData, index + 1, elementData, index, numMoved);
对照着念:“从 elementData 的 index+1 开始,搬到 elementData 的 index,搬 numMoved 个”——结构清晰,毫无歧义。

















