当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

<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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .