class CloneClass2 { String name; int val; int [] valArr; CloneClass2(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() { CloneClass2 cloned = new CloneClass2(name,val); cloned.valArr = valArr; return cloned; } public static void main(String [] args) { CloneClass2 a = new CloneClass2("instance_a", 10); a.val++; a.name=a.name + "_modified"; for (int i=0;i<10;i++) { a.valArr[i]++; } CloneClass2 b = (CloneClass2)a.clone(); System.out.println("==== CloneClass2 b = (CloneClass2)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); } }