[Java]equalsメソッド実装時にテストすること

2015年8月3日月曜日

Java

自分で作ったクラスにequalsメソッドを実装した場合、最低限以下の挙動はテストしておく必要がある。
  1. 反射律
    自分自身との同値比較は真となること。
    a.equals(a)は必ずtureになるということ。

  2. 対称律
    同値比較の左辺と右辺を入れ替えても比較結果は変わらないということ。
    a.equals(b)がtrueであれば、b.equals(a)もtrueとなるということ。
    falseの場合も同じ。

  3. 推移律
    a,bの同値比較結果とb,cの同値比較結果が同じであれば、a,cの同値比較結果も同じとなるということ。
    a.equals(b)がtrueでb.equals(c)がtrueであれば、a.equals(c)もtrueとなるということ。
    falseの場合も同じ。
これらについてはJava APIリファレンスのObjectクラスのequalsメソッドの項にも書かれている。

また、一般的にオブジェクトの中身に言及せずに、上記の3条件を満たしていることがオブジェクトの同値性の定義でもあるというところが面白い。