Почему использование Arrays.copyof () увеличило размер статического массива?

1

Я думал, что массивы статичны, т.е. Они не могут быть увеличены или уменьшены в размере элемента. Почему, когда я объявляю массив из x элементов, я могу скопировать массив элементов y> x в мой новый массив следующим образом:

import java.util.Arrays;

public class CopyOf {

public static void main(String[] args) {
    int[] array ={4,5,4,65,465,4,56,456,6,43,3,5,45};

    //copiedArray has 4 elements
    int[] copiedArray = new int[4];
     copiedArray = Arrays.copyOf(array, array.length);

    // copiedAarray now has 13 elements
    System.out.println(Arrays.toString(copiedArray));

    }

}
Теги:
arrays

2 ответа

9

Эта

int[] copiedArray = new int[4];

Создает ссылку на массив и присваивает ее новому массиву с пробелом для 4 int (s). Тогда это

copiedArray = Arrays.copyOf(array, array.length);

создает новый массив и присваивает его copiedArray. 4 int (ы), созданные на предыдущей строке, уже недоступны, и теперь они могут быть использованы для сбора мусора.

  • 1
    Я думаю, что понимаю это лучше. Таким образом, copiedArray указывает на область памяти, выделенную для массива. Когда мы используем copyOf, он меняет ссылочный адрес для copiedArray и назначает его новой области в памяти. 4int (s) не связаны с какой-либо ссылкой и поэтому не могут быть доступны, но все еще в памяти. Это правильно?
  • 0
    @Crazypigs Правильно. А поскольку на него нет ссылок, теперь его можно собирать.
3

copiedArray изменил ссылку на массив [4] на массив [13]

Теперь переменный array и copiedArray указывают на один и тот же объект.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню