Junior
166
Жогорку көчүрмө жөнүндө эмне билесиң?
AIден жооп
sobes.tech AI
Шолок көчүрүү (shallow copy) объекттин жаңы көчүрмөсүн түзөт, бирок негизги объекттин талааларында шилтеме кылган объекттерди көчүрбөйт. Анын ордуна, шилтемелер көчүрүлөт.
Мүнөздөмөлөр:
- Көчүрүлгөн объекттерге шилтеме кылган мутабель объекттердеги өзгөртүүлөр оригинал объектте жана тескерисинче көрүнөт.
- Терең көчүрүүгө караганда тезирээк, көп шилтемелери бар объекттер үчүн.
Мисал катары, clone() методу менен (эгер объект Cloneable ишке ашырса) же кол менен ишке ашырылат.
clone() мисалы:
// Муттабель талаасы бар класс түзөбүз
class Address {
String city;
public Address(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address{" +
"city='" + city + '\'' +
'}';
}
}
// Addressке шилтеме менен класс түзөбүз, Cloneable ишке ашырабыз
class Person implements Cloneable {
String name;
Address address;
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
// Object.clone() аркылуу шолок көчүрүү
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address=" + address +
'}';
}
}
// Колдонуу мисалы
public class ShallowCopyExample {
public static void main(String[] args) throws CloneNotSupportedException {
Address originalAddress = new Address("New York");
Person originalPerson = new Person("Alice", originalAddress);
// Шолок көчүрүү
Person copiedPerson = (Person) originalPerson.clone();
System.out.println("Original Person: " + originalPerson);
System.out.println("Copied Person: " + copiedPerson);
// Баштапкы объекттин мутабельдүү талаасын өзгөртүү...
originalAddress.city = "Los Angeles";
// Өзгөртүүлөр көчүрмөдө да көрүнөт, анткени алар бирдей Address объектисине шилтеме кылат
System.out.println("\nAfter modifying original address:");
System.out.println("Original Person: " + originalPerson);
System.out.println("Copied Person: " + copiedPerson);
}
}
Бул ыкма, бардык объекттердин хиерархиясын толук көчүрүүнү талап кылбаган учурда же ички объекттер immutable болсо колдонулат.