/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package test.org.jikesrvm.basic.core.bytecode; class TestClone implements Cloneable { String id; TestClone(String id) { this.id = id; } public static void main(String[] args) throws CloneNotSupportedException { final TestClone a = new TestClone("a"); final TestClone b = (TestClone) a.clone(); runTest(a, b); a.id = "aa"; System.out.println(); System.out.println("Changing clones value."); runTest(a, b); System.out.println(); System.out.println("Testing arrays."); System.out.println(); TestClone[][] c = new TestClone[2][3]; for (int i = 0; i < 2; ++i) for (int j = 0; j < 3; ++j) c[i][j] = new TestClone(i + "" + j); final TestClone[][] d = c.clone(); runTest(c,d); System.out.println(); System.out.println("after changing object value"); c[1][1].id = "xx"; runTest(c,d); System.out.println(); System.out.println("after changing element"); c[1][1] = new TestClone("zz"); runTest(c,d); System.out.println(); System.out.println("after changing row"); c[1] = new TestClone[]{new TestClone("a"),new TestClone("b"),new TestClone("c")}; runTest(c,d); } private static void output(final Object o) { if (o instanceof TestClone[][]) { final TestClone[][] c = (TestClone[][]) o; for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) System.out.print(c[i][j].id + " "); System.out.println(); } } else { System.out.println(((TestClone)o).id); } } private static void runTest(final Object a, final Object b) { System.out.println("Original:"); output(a); System.out.println("Clone:"); output(b); System.out.println("a.equals(b) = " + a.equals(b)); System.out.println("a == b = " + (a == b)); } }