多くのインスタンスに共通して行える5つの基本操作

メソッド | 操作の内容 | 関連するクラス |
toString() | 文字列表現を得る | Object |
equals() | 等価判定を行う | Object |
hashCode() | ハッシュ値を得る | Object |
compareTo() | 大小関係を判定する | Comparable |
clone() | 複製する | Object, Cloneable |
インスタンスの文字列表現


toString()メソッドは、「インスタンスの内容を、人が読んで理解できる文字列で表現したもので返す」という目的があります。
インスタンスの等価判定
equals()メソッドは、「インスタンスを比較して等価であるかを判定する」という目的があります
等価と等値の違い
・等価(equals)
指している2つのものが「同じ内容」であること
(同じアドレスを指してなくても良い)
・等値(==)
指しているものが「完全に同一の存在」であること
(つまり同じアドレスを指していること)
インスタンスの要約

コレクションクラスなどは、remove()メソッドを実行する時は、equals()メソッドを用いて、等価判定を行い等価だったら、remove()メソッドを実行します。つまり、equals()メソッドを正しくオーバーライドしないとremove()がうまく実行されない場合があります。
さらに!!
Hash系のコレクションはequals()メソッドを正しくオーバライドしても、remove()メソッドが正しく実行されない場合があります。理由は、Hash系のコレクションは、HashCode()メソッドでハッシュ値を比べてから、equals()メソッドの2段階で等価判定を行います。(ArrayListなどはremove()をする時はequals()メソッドの1段階で等価判定を行う。)
つまり!!
hashCode()メソッドを正しくオーバーライドしないと、正しく等価判定が行われない場合があるわけです。
インスタンスの順序づけ

順序づけすると言っても、何を持って並び変えをするのかをcompareTo()メソッドに記述しなければいけません。
例えば、3教科(国語、数学、英語)のテストを行ったら、国語の点数で順序をするのか、数学か、英語か、もしくは総合点で並び変えるのかをcompareTo()メソッドに記述するということです。
具体的に言うと、、、
public class Account imprements Comparable<Account>{ int number;//講座番号 public int compareTo (Account obj){ if(this.number < obj.number) return -1; else if(this.number > obj.number) return 1; return 0; } }
compareTo()の戻り値
自分自身の方がobjよりも小さい場合・・・負の数
自分自身とobjとが等しい場合 ・・・0
自分自身の方がobjよりも大きい場合・・・正の数
インスタンスの複製

インスタンス自体を複製するために、①new,②全フィールドのコピーをする必要があります。