-1

我一直在尝试使用该equals()方法和==两个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(),这样你就没有两个对象相等但有两个不同的哈希码——不是犹太洁食!

于 2013-09-10T17:37:55.493 回答
2

s1 == s2只会评估trueifs1s2are the same object。他们不是你的情况。尽管内容可能相同,但它们是不同的对象。

.equals方法(如果正确实施;那是您的工作)比较内容,因此,在您的情况下,将返回true.

于 2013-09-10T17:38:41.587 回答
0

除非您覆盖 equals,否则它将告诉您 s1 和 s2 确实是不同的对象。他们是两个不同的婴儿,只是碰巧有相同的名字。:)

于 2013-09-10T17:39:41.333 回答
0

看到这个问题:Java中== vs equals()有什么区别?

这解释了该方法之间的区别==和使用.equals()方法。

或者这个有用的视频

于 2013-09-10T17:40:04.333 回答