voorbeelden van ondiepe en diepe kopie demonstratie in Java

// shallow copy example
public class a
{
    public static void main(String[] args) throws CloneNotSupportedException
    {
        b x = new b(2);
        System.out.println(x.i[0]);//previous value for object x
        System.out.println(x.k);
        b y =(b)x.clone();//y shallow clone of object x
        y.i[0] = 10; y.k = 999;//changed values in object y
        System.out.println(y.i[0]);//values of y after change
        System.out.println(y.k);

        System.out.println(x.i[0]);//values of x after change     
        System.out.println(x.k);
        System.out.println(x.getClass() == y.getClass());//both objects belong to same class
        System.out.println(x == y);//both objects are different, they are not the same
    }
}

class b implements Cloneable
{
    public int i[] = new int[1];
    int k;

    public Object clone() throws CloneNotSupportedException
    {
        return super.clone();
    }

    b(int j)
    {
        super();
        i[0] = j;
        k = j + 2;
    }
}

/*output

2
4
10
999
10
4
true 
false
*/
//*********************************************************************
//deep copy example

public class a
{     
    public static void main(String[] args) throws CloneNotSupportedException 
    {  
        b x = new b(2);
        System.out.println(x.i[0]);//object x values before change
        System.out.println(x.k);

        b y = (b)x.clone();//deep clone y of object x

        System.out.println(y.i[0]);//values of object y
        System.out.println(y.k);

        System.out.println(x.i[0]);//values of object x after changing the values of the members in object y in clone method  
        System.out.println(x.k);
        System.out.println(x.getClass() == y.getClass());
        System.out.println(x==y);
    }
}

class b implements Cloneable
{
    public int i[] = new int[1];
    int k;

    public Object clone()throws CloneNotSupportedException
    {
        b t = new b(6);
        return t;
    }

    b(int j)
    {
        i[0] = j;
        k = j+2;
    }
}

/*

2
4
6
8
2
4
true 
false
*/

Ik heb de voorbeelden al geschreven, kijk of ik iets weggelaten heb. Ik moet er een demo over geven en wilde dat het zo eenvoudig mogelijk zou zijn. Laat me weten of ik het nog eenvoudiger kan maken. Ik heb offertes gegeven waar ze waarden hebben veranderd of objecten zijn gekloond.

0
ok lemme edit ..
toegevoegd de auteur Nav, de bron
Kan je me een directe link geven, indien mogelijk ... in Java
toegevoegd de auteur Nav, de bron
Waarschijnlijk beter geplaatst op codereview.stackexchange.com
toegevoegd de auteur Paul Bellora, de bron
Demo's moeten mooi zijn; graag consistent inspringen.
toegevoegd de auteur Dave Newton, de bron

1 antwoord

Een gouden tip voor demo's: gebruik zinvolle klassenamen en variabele namen en maak de voorbeelden concreter. Gebruik bijvoorbeeld een klasse Boek en een klasse Auteur

public class Book{
  private String title;
  private Author author;
...
}
public class Author{
  private String name;
  ...
}

Met een getter/setter (of zelfs openbare velden) kun je een diepe/ondiepe kloon van een Boek -instantie maken, en illustreren welke veranderingen optreden wanneer je de naam van de Auteur verandert . Precies hetzelfde als wat je deed, maar makkelijker te vertellen aan een publiek, en gemakkelijker voor een publiek om te volgen, omdat iedereen weet wat een boek en een auteur is en niet hoeft te kijken naar de code om je uitleg te volgen

2
toegevoegd
Bedankt dat ik een idee kreeg van wat u noemde ......... Maar het gebruik van String is niet goed voor een ondiep voorbeeld, omdat het toch als een ander object wordt gekopieerd, omdat het een referentietype is, omdat strings onveranderbaar zijn. Daarom moest toevlucht tot dit .. lol
toegevoegd de auteur Nav, de bron
Ja :) ben het met je eens ... Bedankt voor je tijd :)
toegevoegd de auteur Nav, de bron
Daarom zei ik dat je de Auteur gebruikt om naar te verwijzen. U kunt de titel altijd wijzigen in bijvoorbeeld int ISBNNumber als u liever met int's werkt. Zolang het begrijpelijk is voor uw publiek
toegevoegd de auteur Robin, de bron