Я не совсем понимаю, как работает System.arraycopy. Имейте простой пример:
String[] arr = {"a"};
String[] copyArr = new String[10];
System.arraycopy(arr, 0, copyArr, 0, 1);
System.out.println(Arrays.toString(copy));
Я понимаю это как «скопировать 1 элемент из arr, начиная с [0], чтобы скопироватьArr в позицию [0]». И это нормально. Теперь я меняю его на:
String[] arr = {"a"};
String[] copyArr = new String[10];
System.arraycopy(arr, 1, copyArr, 0, 0);
System.out.println(Arrays.toString(copy));
Поскольку arr.length равен 1, а единственный индекс, который мы можем вызвать, равен [0], я ожидал, что он выдаст исключение ArrayIndexOutOfBoundsException, но это не так.
Итак, вопрос в том, в чем разница между этими двумя строками ниже и почему первая возможна, если нет элемента в [1] в src (поскольку его длина равна 1), это собственный метод, так как он реализован внутри?
System.arraycopy(src, 1, dest, 0, 0);
System.arraycopy(src, 0, dest, 0, 0);
Что интересно, когда мы изменим его на:
System.arraycopy(src, 2, dest, 0, 0);
есть ArrayIndexOutOfBoundsException (и этот случай описан в документах, потому что srcPos+length > src.length).