Я занимаюсь изучением и чтением того, что делают эти три метода (Справочная копия, Мелкая копия и Глубокая копия) и как их создавать; и мне все еще трудно понять, как реализовать указанные методы в моем коде.Ссылка, неглубокая и глубокая копия
Первый метод должен быть ссылочным методом (refCopy), второй должен быть мелким методом (shalCopy) и последним методом глубокой копии (deepCopy). Не уверен, что они верны. Будем очень благодарны за любую помощь в том, как правильно выполнять эти копии.
Это мой код до сих пор:
public class ArrayRefCopy implements Cloneable {
private static int n = 3;
private static StringBuffer[] buf = new StringBuffer[4];
public static void main(String[] args){
StringBuffer[] hel = new StringBuffer[n];
hel[0] = new StringBuffer("hello");
hel[1] = new StringBuffer("hallo");
hel[2] = new StringBuffer("hey");
refCopy(hel);
System.out.println(Arrays.toString(hel));
shalCopy(hel);
System.out.println(Arrays.toString(hel));
}
public static StringBuffer[] refCopy(StringBuffer[] bra){
StringBuffer[] ber = bra;
return ber;
}
public static StringBuffer[] shalCopy(StringBuffer[] bar){
return buf = bar;
}
public static StringBuffer[] deepCopy(StringBuffer[] bri){
StringBuffer[] deep = new StringBuffer[n];
return deep = bri.clone();
}
}
================================ =====================================================
Я изменил последние два методы для этого (созданные объекты в них):
public static StringBuffer[] shalCopy(StringBuffer[] bar){
StringBuffer[] buf = new StringBuffer[n];
return buf = Arrays.copyOf(bar, n);
}
public static StringBuffer[] deepCopy(StringBuffer[] bri){
StringBuffer[] deep = new StringBuffer[n];
return deep = bri.clone();
}
Но когда я делаю это:
StringBuffer[] hel = new StringBuffer[n];
hel[0] = new StringBuffer("hello");
hel[1] = new StringBuffer("hallo");
hel[2] = new StringBuffer("hey");
StringBuffer[] hal = new StringBuffer[n];
hal = deepCopy(hel);
System.out.println(hal.equals(hel));
Это дает мне ложь. Я думал, что клон полностью копирует объект со своими значениями. Почему это дает мне ложь?
UPDATE:
public static StringBuffer[] shalCopy(StringBuffer[] bar){
StringBuffer[] buf = new StringBuffer[bar.length];
for(int i = 0; i < bar.length; i++){
buf[i] = bar[i];
}
return buf;
}
public static StringBuffer[] deepCopy(StringBuffer[] bri){
StringBuffer[] deep = new StringBuffer[bri.length];
for(int i=0; i < bri.length; i++){
bri[i] = new StringBuffer(bri[i]);
deep[i] = bri[i];
}
return deep;
}
Определите правильно. –