A return message carries the method's result back to the caller. When the result is an object reference, its label can identify the object returned.
For `Player selected = game1.GetCurrentPlayer();`, the call message travels from the caller to `game1 : Game` and is labeled `GetCurrentPlayer()`.
If Game's `CurrentPlayer` field refers to `player1 : Player`, the return message goes from Game back to its caller. A label such as `player1 : Player` identifies the value returned. The Player object does not become the receiver of `GetCurrentPlayer()`.
When Game returns its existing `CurrentPlayer`, the caller gets another reference to the same Player. A return arrow does not imply a new Player object.
If Game executes `new Player()` before returning, the interaction includes creation of that Player and then the return of its reference. The object has an origin before the returned value reaches the caller.