自反性

重写equals方法

江枫思渺然 提交于 2019-12-10 07:49:49
我们都知道,==是用来比较引用的(物理上的相等),而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 反例: 破坏自反性 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