<p>改写equals一定要遵循的原则:</p>
<p>1,自反性(refexive)。对于任意的引用值x,x.equals(x)一定为true。</p>
<p>2,对称性(symmetric)。对于任意的引用值x和y,当且仅当x.equals(y)时,y.equals(x)也一定为true。</p>
<p>3,传递性(transitive)。对于任意的引用值x,y和z,如果x.equals(y)为true,y.equals(x)为true,那么x.equals(z)也一定返回 </p>
<p> true。</p>
<p>4,一致性(consistent)。如果x.equals(y)为true,并且x,y一直没有改变,则x.equals(y)为true.</p>
<p>5,x.equals(null)为false。</p>
<p>6,改写equals方法一定要改变hashcode方法</p>
<p>java中关于hashcode的规范:</p>
<p>1,在一个应用程序执行期间,如果一个对象的equals方法作比较所用到的信息没有被修改的话,那么,对该对象调用hashcode多次,他应</p>
<p> 该始终如一地返回同一个整数。</p>
<p>2,如果两个对象根据equals(Object)方法是相等的,那么调用者两个对象任一一个对象的hashcode方法必须产生同样的整数结果。</p>
<p>3,如果两个对象根据equals(Object)方法是不相等的,那么<span style="color: #ff0000;">并不要求</span>调用者两个对象任一一个对象的hashcode方法必须产生不同样的整数结果。</p>
<p>一个完整的例子:</p>
<p>public class EqualOverride {<br>private int file1;</p>
<p>private int file2;</p>
<p>private int file3;</p>
<p>public boolean equals(EqualOverride e) {<br>if (e == this)<br>return true;<br>if (!(e instanceof EqualOverride)) {<br>return false;<br>}<br>EqualOverride e1 = (EqualOverride) e;<br>return e1.file1 == this.file1 && e1.file2 == this.file2<br>&& e.file3 == this.file3;<br>}</p>
<p>public int hashcode() {<br>int result = 17;<br>result = 37 * result + file1;<br>result = 37 * result + file2;<br>result = 37 * result + file3;<br>return result;<br>}<br>}</p>
<p>1,自反性(refexive)。对于任意的引用值x,x.equals(x)一定为true。</p>
<p>2,对称性(symmetric)。对于任意的引用值x和y,当且仅当x.equals(y)时,y.equals(x)也一定为true。</p>
<p>3,传递性(transitive)。对于任意的引用值x,y和z,如果x.equals(y)为true,y.equals(x)为true,那么x.equals(z)也一定返回 </p>
<p> true。</p>
<p>4,一致性(consistent)。如果x.equals(y)为true,并且x,y一直没有改变,则x.equals(y)为true.</p>
<p>5,x.equals(null)为false。</p>
<p>6,改写equals方法一定要改变hashcode方法</p>
<p>java中关于hashcode的规范:</p>
<p>1,在一个应用程序执行期间,如果一个对象的equals方法作比较所用到的信息没有被修改的话,那么,对该对象调用hashcode多次,他应</p>
<p> 该始终如一地返回同一个整数。</p>
<p>2,如果两个对象根据equals(Object)方法是相等的,那么调用者两个对象任一一个对象的hashcode方法必须产生同样的整数结果。</p>
<p>3,如果两个对象根据equals(Object)方法是不相等的,那么<span style="color: #ff0000;">并不要求</span>调用者两个对象任一一个对象的hashcode方法必须产生不同样的整数结果。</p>
<p>一个完整的例子:</p>
<p>public class EqualOverride {<br>private int file1;</p>
<p>private int file2;</p>
<p>private int file3;</p>
<p>public boolean equals(EqualOverride e) {<br>if (e == this)<br>return true;<br>if (!(e instanceof EqualOverride)) {<br>return false;<br>}<br>EqualOverride e1 = (EqualOverride) e;<br>return e1.file1 == this.file1 && e1.file2 == this.file2<br>&& e.file3 == this.file3;<br>}</p>
<p>public int hashcode() {<br>int result = 17;<br>result = 37 * result + file1;<br>result = 37 * result + file2;<br>result = 37 * result + file3;<br>return result;<br>}<br>}</p>
Java equals与hashCode方法重写

被折叠的 条评论
为什么被折叠?



