/* Author: James Tam Version: Feb. 4, 2021 Learning objective: Deep vs. shallow copy of arrays of 'objects': a more complex example with a subtle problem. */ public class Driver { public static void main(String [] args) { Person [] people1 = new Person[3]; Person [] people2 = people1; //Shallow copy #1 people2 = new Person[3]; int i; i = 0; while (i < people1.length) { people1[i] = new Person(("Name" + i),(i+1)); i++; } //Shallow copy #2 (error is subtle) i = 0; while (i < people1.length) { people2[i] = people1[i] ; i++; } System.out.println("Display right after copy"); System.out.println("People1 array"); i = 0; while (i < people1.length) { System.out.println(people1[i]); i++; } System.out.println(); System.out.println("People2 array"); i = 0; while (i < people1.length) { System.out.println(people1[i]); i++; } System.out.println(); //First set of edits people1[0].setAge(7); people2[2].setAge(13); System.out.println("Display after first set of edits"); System.out.println("People1 array"); i = 0; while (i < people1.length) { System.out.println(people1[i]); i++; } System.out.println(); System.out.println("People2 array"); i = 0; while (i < people1.length) { System.out.println(people1[i]); i++; } System.out.println(); //Create new objects for second array i = 0; while (i < people2.length) { people2[i] = new Person(); i++; } //An actual deep copy of arrays i = 0; while (i < people1.length) { people1[i].setAge(123); people2[i].setAge(people1[i].getAge()); i++; } //Second set of edits people1[0].setAge(7); people2[2].setAge(13); System.out.println("Display after second set of edits"); System.out.println("People1 array"); i = 0; while (i < people1.length) { System.out.println(people1[i]); i++; } System.out.println(); System.out.println("People2 array"); i = 0; while (i < people1.length) { System.out.println(people2[i]); i++; } System.out.println(); } }