もう一度参照遊び。

未了だった「参照遊び。」を再考してみます。分からなかったのは、この点でした。

気になるのは、「Rectangle@17590db」という表記。「Rectangleオブジェクト」で「メモリのロケーションが17590db」とか?

結局分からないままでしたが、でも一通りレッスンを終えて、「toString未作成のところで」文字列にキャストした時に何が行われるのかは考えられるようになりました。toStringをオーバーライドしていない状態ですから、Objectから継承しているtoStringが実行されるのですね。
Object.toStringメソッドのドキュメントを読んでみることにします。

オブジェクトの文字列表現を返します。通常、toString メソッドはこのオブジェクトを「テキストで表現する」文字列を返します。この結果は、人間が読める簡潔で有益な情報であるべきです。すべてのサブクラスで、このメソッドをオーバーライドすることをお勧めします。
Object クラスの toString メソッドは、オブジェクトの派生元のクラス名、アットマーク (@)、およびオブジェクトのハッシュコードの符号なし 16 進表現から構成される文字列を返します。つまり、このメソッドは次の値と等しい文字列を返します。

getClass().getName() + '@' + Integer.toHexString(hashCode())

「メモリのロケーション」ではないのですが、「等価なオブジェクトでは等しい値」で「できるかぎり(略)異なるオブジェクトについては異なる整数値」となるハッシュコードの16進表現、近いところはついているみたいです。でもこのハッシュコード、必ずしも「2 つのオブジェクトが等価でないとされた場合は、これらのオブジェクトに対して hashCode メソッドを呼び出したときに、結果が異なる整数値にならなくてもかまわない」ということらしくて、ちょっと微妙な感じですね。