javaによるequalsの基本的な実装について。
意外と面倒なんですが、このequalsメソッドの実装パターンは一番よく使うかと思います。
まず、自分自身と入力が同じであるかを比較します。同一のインスタンスであれば同じであることは明確ですので、最初に呼び出してパフォーマンスアップです。
これはString等でも利用されている方式となります。例えば、"aaa".equals(" aaa ".trim())はtrueになりますが、この場合最初の同一チェックでfalseとなるため、同値チェックが行われます。これが"aaa".equals("aaa")なら同値チェックの前に同一チェックでtrueとされます。この場合かなり高速な比較となります。String#intern()が一番輝くケースですね。
で、次にnullチェックです。比較対象がnullならば紛れもなくfalseです。そして型チェック。型の互換性がないならそもそも同値ではありません。instanceof演算子は左辺がnullならfalseになるので、nullチェックと型チェックが同時に出来ます。
型チェックが済めば安全にキャストができ、その後のチェックは機械的に行います。
この手法なら、あんまり難しいことを考えずに、高速で安全なequalsのオーバーライドができるのです。