<b>深化equals办法对象相等比较</b>[Java编程]
本文“<b>深化equals办法对象相等比较</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
equals办法的重要性毋须多言,只要你想对比的两个对象不肯是同一对象,你就应当实现equals办法,让对象用你认为相等的条件来举行对比.下面的内容只是API的标准,没有什么太高深的意义,但我之所以最早把它列在这儿,是因为这些标准在事实中并非真正能保证得到实现.
1.关于任何引用范例, o.equals(o)==true 成立.
2.假如 o.equals(o1)==true 成立,那么o1.equals(o)==true也一定要成立.
3.假如 o.equals(o1)==true 成立且o.equals(o2)==true 成立,那么o1.equals(o2)==true 也成立.
4.假如第一次调用o.equals(o1)==true 成立再o和o1没有改变的情形下今后的任何次调用都成立.
5.o.equals(null)==true 任什么时刻间都不成立.
以上几条法则并非最完好的表述,具体的请拜见API文档.关于Object类,它供应了一个最最严密的实现,那就是只有是同一对象是,equals办法才返回true,也就是人们常说的引用对比而不是值对比.这个实现严密得已经没有什么实际的意义,所以在具体子类(相关于Object来说)中,假如我们要举行对象的值对比,就必须实现自己的equals办法.
先来看一下以下这段程序:
public boolean equals(Object obj)
{
if (obj == null) return false;
if (!(obj instanceof FieldPosition))
return false;
FieldPosition other = (FieldPosition) obj;
if (attribute == null) {
if (other.attribute != null) {
return false;
}
}
else if (!attribute.equals(other.attribute)) {
return false;
}
return (beginIndex == other.beginIndex
&& endIndex == other.endIndex
&& field == other.field);
}
这是JDK中java.text.FieldPosition的尺度实现,仿佛没有什么可说的.我信相大大都或绝大大都程序员认为,这是精确的合理的equals实现.毕竟它是JDK的API实现啊.还是让我们以事实来说话吧:
package debug;
import java.text.*;
public class Test {
public static void main(String[] args) {
FieldPosition fp = new FieldPosition(10);
FieldPosition fp1 = new MyTest(10);
System.out.println(fp.equals(fp1));
System.out.println(fp1.equals(fp));
}
}
class MyTest extends FieldPosition{
int x = 10;
public MyTest(int x){
super(x);
this.x = x;
}
public boolean equals(Object o){
if(o==null) return false;
if(!(o instanceof MyTest )) return false;
return ((MyTest)o).x == this.x;
}
}
运行一下看看会打印出什么:
System.out.println(fp.equals(fp1));打印true
System.out.println(fp1.equals(fp));打印flase
以上是“<b>深化equals办法对象相等比较</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |