Complete the Primitive types vs references exercises before reviewing the solutions.
Review the reference exercise 4 solution with AP CS Tutor Brandon Horn.
Original code
Coordinate2D referenceOne = new Coordinate2D(1, 1);
Coordinate2D referenceTwo = referenceOne;
System.out.println(referenceOne);
System.out.println(referenceTwo);
referenceTwo = new Coordinate2D(2, 2);
System.out.println(referenceOne);
System.out.println(referenceTwo);
Output
(1, 1)
(1, 1)
(1, 1)
(2, 2)
Step by step with memory diagrams
Step 1
Coordinate2D referenceOne = new Coordinate2D(1, 1);
Coordinate2D referenceTwo = referenceOne;
System.out.println(referenceOne);
System.out.println(referenceTwo);
Memory diagram after Step 1
The first 2 lines are the same as in Reference exercise 2, so the memory diagram is the same.
Output after Step 1
(1, 1)
(1, 1)
As in Reference exercise 2, both print
statements print the same object. See Reference exercise 1 Step 3 for an explanation of what happens when referenceOne
is printed.
Step 2
Coordinate2D referenceOne = new Coordinate2D(1, 1);
Coordinate2D referenceTwo = referenceOne;
System.out.println(referenceOne);
System.out.println(referenceTwo);
referenceTwo = new Coordinate2D(2, 2);
Memory diagram after Step 2
The right side of the last line, new Coordinate2D(2, 2);
, makes a new object/instance of type Coordinate2D
containing x: 2, y: 2
.
The left side sets the value of referenceTwo
to the memory address of the new object. In other words, it sets referenceTwo
to point to the new object. The value of referenceTwo
is the arrow pointing to the object.
The value of referenceOne
remains unchanged.
Step 3
Coordinate2D referenceOne = new Coordinate2D(1, 1);
Coordinate2D referenceTwo = referenceOne;
System.out.println(referenceOne);
System.out.println(referenceTwo);
referenceTwo = new Coordinate2D(2, 2);
System.out.println(referenceOne);
System.out.println(referenceTwo);
Memory diagram after Step 3
Output after Step 3
(1, 1)
(1, 1)
(1, 1)
(2, 2)