-1

equals()メソッドと==2 つのBabyオブジェクトを使用しようとしましたが、両方ともfalse.

public class Baby {
    String name;

    Baby(String myName) {
        name = myName;
    }

    public static void main(String[] args) {
        Baby s1 = new Baby("a");
        Baby s2 = new Baby("a");
        System.out.println(s2.equals(s1));
        System.out.println(s1 == s2);
    }

}
4

4 に答える 4

7

出力は正しいです。操作を使用する場合、s1 は実際には s2 と等しくありません。 ==これらは別個のインスタンスであるためです。これはまさに==チェック対象です。Baby は equals メソッドをオーバーライドしないため、これを呼び出すとデフォルトで==操作が行われ、false が返されます。代わりに、クラスでメソッドをオーバーライドし、public boolean equals(Object o)必要に応じて呼び出す必要があります。

public class Baby {
   String name;

   Baby(String myName) {
      name = myName;
   }

   @Override
   public int hashCode() {
      final int prime = 31;
      int result = 1;
      result = prime * result + ((name == null) ? 0 : name.hashCode());
      return result;
   }

   @Override
   public boolean equals(Object obj) {
      if (this == obj)
         return true;
      if (obj == null)
         return false;
      if (getClass() != obj.getClass())
         return false;
      Baby other = (Baby) obj;
      if (name == null) {
         if (other.name != null)
            return false;
      } else if (!name.equals(other.name))
         return false;
      return true;
   }

   public static void main(String[] args) {
      Baby s1 = new Baby("a");
      Baby s2 = new Baby("a");
      System.out.println(s2.equals(s1));
      System.out.println(s1 == s2);
   }


}

ああ、オーバーライドすることも忘れないでくださいhashCode()。そうすれば、2 つのオブジェクトが等しくても、2 つの異なる hashCode を持つことはありません。コーシャではありません!

于 2013-09-10T17:37:55.493 に答える
2

s1 == s2とが同じオブジェクトtrueである場合にのみ評価されます。彼らはあなたの場合ではありません。内容は同じかもしれませんが、それらは異なるオブジェクトです。s1s2

.equalsメソッド(正しく実装されている場合。それがあなたの仕事です)は内容を比較するため、あなたの場合は を返しますtrue

于 2013-09-10T17:38:41.587 に答える
0

この質問を参照してください: Java の == と equals() の違いは何ですか?

とメソッド==の使用の違いを説明しています。.equals()

または、この役立つビデオ.

于 2013-09-10T17:40:04.333 に答える
0

equals をオーバーライドしない限り、s1 と s2 が実際に異なるオブジェクトであることがわかります。彼らはたまたま同じ名前を持つ 2 つの異なる赤ちゃんです。:)

于 2013-09-10T17:39:41.333 に答える