 When we deal with primitive types like int, double, char and boolean, the data is stored directly in the memory address for the variable. When we do this assignment, j is assigned k, the current value of k is copied into j's memory area. But when we create objects, the variables hold references to the memory area that contains the data. Now, what happens when we do this assignment that says r2 is assigned r1? The contents of r1 are not copied into r2. Instead, r2 is set to refer to the same object as r1. The area of memory previously referenced by r2 is no longer accessible. A process called the garbage collector will reclaim that area of memory to make it available for other objects to be allocated. Because r1 and r2 now reference the same memory area, this code setting r2.width to 7 and then printing r1.width will produce an output of 7.0. And here's the code to prove it. The take away from this video, primitives store their value directly in memory, objects store references to the memory where the data is held.