Это потому, что вы передаете массив по ссылке, а не по значению. По сути, это означает, что массив reversedNames
по-прежнему указывает на массив randomNames
, поэтому изменение одного изменит другой.
Вот диаграмма переменных:
Первоначально:
randomNames
Когда мы вводим функцию revertNames
:
randomNames <-------- s
Массив s
по-прежнему указывает на массив randomNames
! Таким образом, когда мы меняем s
, мы также меняем randomNames
.
Как мы покидаем функцию:
randomNames <--------- s <--------- reversedNames
Таким образом, reversedNames
указывает на randomNames
.
После завершения вызова функции:
randomNames <--------- reversedNames
Хотя массив s
исчез, reversedNames
по-прежнему указывает на randomNames
.
Чтобы устранить проблему, создайте временную переменную внутри функции revertNames
:
public static String[] revertNames(String[] oldarray) {
// Create temporary array to avoid affecting original array
String[] s = oldarray.clone();
...