質問: "tarou"; list.remove(ts); System.out.println("要素数は" + list.size()); ■equals()メソッドのオーバーライドがないと、思うようなremove()がされませんよ、という内容のソースなのですが、「1」の箇所でインスタンスに対してまたNewしているのですが、これがなにをしているのかよくわかりません。
回答: これは「変数」に対し、「新しいインスタンス」を「new」して格納している、というのが正しい表現です。 インスタンスに対しnewするというのは誤った認識です。 最初に生成したtsの中身のnameはtarou、後から作ったtsの中身のnameもtarou、一見そっくりさんに見えますが、あくまで別人です。Listのremoveは完全に一致したものを取り除く処理なので、1のremoveが正しく動作しないのです。もしこれを取り除きたいのであれば、TestClassの「equals」メソッドをオーバーライドして、「同一人物かどうかを確認するのはnameだけでよい」とすれば、無事後から作ったtarouさんは同一人物とみなされ、removeが正しく動作します。以下はTestClassのequals実装例です。 ``` public boolean equals(Object o) { if(o instanceof TestClass) { return this.name.equals(((TestClass)o).name); } else { return false; } } ```