Не разбирам точно как работи 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], до copyArr до позиция [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).