程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 深入equals方法

深入equals方法

編輯:JAVA編程入門知識

  深入equals方法

  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;
  
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved