take following points into consideration
1. assigning one variable to another variable means that we are copying the bits present in one variable into another variable
we will first see how the objects are their reference variables are
the reference variables hold the bits which represent the memory of the object at which it is stored (unlike primitives where direct value (those are also bits )are copied )
so even when we assign one reference variable to some another reference variable then the bits that represent the memory at which object resides are copied (hence the object is not copied and the object is the same and both the reference variables refer to the same object now )
read the comments in the program now
start the flow from main method
was a little complicated
I hope I have explained well but if you still don't have understood
feel free to ask , I will write full explanation then
but first go through the explanation in the book once again
happy learning