Как правильно использовать метод clone для массива объектов? JAVA
Необходимо, чтобы при изменении массива arrayTwo, не изменялся массив arrayOne
public class Item implements Cloneable {
public int item;
Item(int item)
{
this.item = item;
}
@Override
protected Object clone() throws CloneNotSupportedException
{
return super.clone();
}
}
public class Main {
public static void main(String[] args)
{
Item arrayOne[] = {new Item(1), new Item(2), new Item(3)};
Item arrayTwo[] = arrayOne.clone();
arrayTwo[0].item = 4;
for (Item item : arrayOne)
{
System.out.println(item.item);
}
}
}
Ответы (1 шт):
Автор решения: стасевич
→ Ссылка
в данном случае у тебя неглубокое(поверхностное) клонирование, копируются ссылки, т.е. оригинал и клон указывают на один объект в куче.
надо использовать глубокое клонирование - изменить метод сlone
@Override
protected Item clone() throws CloneNotSupportedException {
return (Item) super.clone();
}
и придётся клонировать каждый объект
Item[] arrayTwo = {arrayOne[0].clone(), arrayOne[1].clone(),arrayOne[2].clone()};
почитай https://metanit.com/java/tutorial/3.13.php для лучшего понимания, или другие статьи сам поищи.