你的位置:首页 > 软件开发 > Java > 重写equals方法

重写equals方法

发布时间:2016-08-06 13:01:44
我们都知道,==是用来比较引用的(物理上的相等),而equals方法是用来比较值的(逻辑上的相等),在许多时候需要重写equals方法来实现我们的需求,比如把对象放到容器中,然后去查找对象。在重写equals 方法时要遵循一些契约:自反性:对于非空引用x而言,x.equals(x ...

 我们都知道,==是用来比较引用的(物理上的相等),而equals方法是用来比较值的(逻辑上的相等),在许多时候需要重写equals方法来实现我们的需求,比如把对象放到容器中,然后去查找对象。

在重写equals 方法时要遵循一些契约:

  • 自反性:对于非空引用x而言,x.equals(x) 必须为true
  • 对称性:对于非空引用x和y,如果x.equals(y)为true,那么y.equals(x)必须也为true
  • 传递性:对于非空引用x,y和z,如果x.equals(y)为true,并且y.equals(z)为true,那么x.equals(z)必须也为true
  • 持久性:对于非空引用x和y,如果x.equals(y) 为true,那么当在x和y并未被修改的情况下,无论执行多少次x.equals(y),这个结果都为true
  • null-false: 对于非空引用x,x.equals(null) 始终为false

 

反例:

破坏自反性

重写equals方法重写equals方法
 1 public class AntiReflexive { 2  3   private String str; 4   public String getStr() { 5     return str; 6   } 7  8   public void setStr(String str) { 9     this.str = str;10   }11   12   public boolean equals(Object o) {13     if (!(o instanceof AntiReflexive)) {14       return false;15     }16     17     AntiReflexive ar = (AntiReflexive)o;18     return this.str.equals(ar.str.toLowerCase());  // tolowercase 导致了自反性的破坏19   }20   21   public static void main(String[] args) {22     AntiReflexive ar1 = new AntiReflexive();23     ar1.setStr("Hello world");24     25     System.out.println(ar1.equals(ar1));26   }27 }

原标题:重写equals方法

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录