Клонирование позволяет создавать копию объекта.
Поверхностное (shallow) клонирование: Копируется сам объект, но поля-ссылки указывают на те же объекты, что и в оригинале. Изменения в одном из ссылочных объектов будут видны в другом. Реализуется по умолчанию методом Object.clone().
Глубокое (deep) клонирование: Создается полная копия объекта и всех объектов, на которые указывают его поля-ссылки. Изменения в копиях не затрагивают оригиналы. Требует ручной реализации или использования библиотек (например, Apache Commons Lang SerializationUtils.clone()).
Для клонирования объекта класс должен реализовывать интерфейс Cloneable.
java
Массивы в Java являются объектами и могут быть клонированы методом clone(). Для примитивных массивов это всегда глубокое клонирование. Для массивов объектов - поверхностное.
java
Двумерные массивы (массивы массивов) представляют собой массив ссылок на другие массивы. Клонирование двумерного массива с помощью clone() приводит к поверхностной копии - копируется массив-контейнер, но внутренние массивы остаются теми же. Для глубокого клонирования двумерного массива необходимо клонировать каждый внутренний массив отдельно.
java
Использование клонирования актуально, когда требуется независимая модификация копии объекта без изменения оригинала. Например, при работе с изменяемыми данными в многопоточной среде, создании снимков состояния объекта, для реализации шаблона Prototype.