class CloneClass1 { String name; int val; int [] valArr; CloneClass1(String name, int val) { this.name=name; this.val=val; valArr = new int[10]; for (int i=0;i<10;i++) { valArr[i]=i; } } public String toString() { StringBuffer s = new StringBuffer(name + " val=" + val + " valArr="); for (int i=0;i<10;i++) { s.append(" " + valArr[i]); } return s.toString(); } public Object clone() { CloneClass1 cloned = new CloneClass1(name,val); return cloned; } public static void main(String [] args) { CloneClass1 a = new CloneClass1("instance_a", 10); a.val++; a.name=a.name + "_modified"; for (int i=0;i<10;i++) { a.valArr[i]++; } CloneClass1 b = (CloneClass1)a.clone(); System.out.println("==== CloneClass1 b = (CloneClass1)a.clone() ==="); System.out.println("a: " + a); System.out.println("b: " + b); a.val++; a.name=a.name + "_2x"; for (int i=0;i<10;i++) { a.valArr[i]++; } System.out.println("==== a est modifie, mais pas b ===="); System.out.println("a: " + a); System.out.println("b: " + b); } }