Junior — Middle
Объекттин толук көчүрмөсү менен анын үстүнкү көчүрмөсүнүн айырмасы эмнеде?
sobes.tech AI
AIден жооп
Объекттин толук көчүрмөсү (deep copy) жана үстүрт көчүрмө (shallow copy) ички объекттердин көчүрүлүш деңгээлине жараша айырмаланат:
-
Үстүрт көчүрмө жаңы объект түзөт, бирок башка объекттерге шилтемелер болгон талаалар шилтемелер катары көчүрүлөт. Башкача айтканда, ички объекттер көчүрүлбөйт, тескерисинче, оригинал жана көчүрмө ортосунда бөлүшүлөт.
-
Толук көчүрмө жаңы объект түзөт жана бардык ички объекттерди рекурсивдүү көчүрөт, толук көз карандысыз көчүрмө түзөт.
Java мисалы:
import java.util.ArrayList;
import java.util.List;
class Person implements Cloneable {
String name;
List<String> hobbies;
public Person(String name, List<String> hobbies) {
this.name = name;
this.hobbies = hobbies;
}
// Үстүрт көчүрмө
public Person shallowCopy() throws CloneNotSupportedException {
return (Person) this.clone();
}
// Толук көчүрмө
public Person deepCopy() {
List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
return new Person(this.name, hobbiesCopy);
}
}
Бул мисалда, үстүрт көчүрмөдө hobbies тизмеси оригинал жана көчүрмө ортосунда бөлүшүлөт, ал эми терең көчүрмөдө жаңы тизмеси түзүлөт.