簡體   English   中英

覆蓋等於

[英]Override equals

我有這個課:

public class Phone{ 
    private String number;
    //get and set of class
}

然后我有另一個使用“電話”的類

public class Antena{
   private String name;
   private ArrayList<Phone> phones;
}

現在,在添加元素之前,我只想添加元素,如果元素不存在於數組中。 我是Java的新手,經過一些研究,我發現我需要重寫equals方法。 所以有人可以給我一些提示嗎?

這就是我使用equals方法的方式:

if(!phones.equals(phone))
   phones.add(phone);

注釋現在具有足夠的信息來實際回答問題。

第1部分

實現等於:

public boolean equals(Object obj) { 
  if (obj == null) return false;
  if (obj.getClass() != this.getClass()) return false;
  Phone t = (Phone ) obj; 
  return t.number.equals(this.number);
}

第2部分

實現哈希碼

public int hashCode() {
  return number.hashCode();
}

第三部分

使用集合而不是ArrayList來要求唯一性。

private HashSet<Phone> phones;

您重寫equals方法對類對象進行相等性測試。 例如,您有兩個Phone對象p1和p2。

Phone p1 = new Phone();
Phone p2 = new Phone();
p1.setNumber(10);
p2.setNumber(10);
\\Ideally these two objects are equal but when you try to do equality test , it will return false.
System.out.println(p1==p2);  // outputs false because p1 and p2 are two different references 

持有不同的內存地址。 還有,

System.out.println(p1.equals(p2));  // prints false when not overrided 

當您覆蓋equals方法時,您可以添加條件以對這兩個對象進行邏輯測試。

public boolean equals(Object obj)
  {

    if (!(obj instanceof Phone)) 
      return false;
    return this.getNumber() == ((Phone)obj).getNumber();
  }

現在,如果您在p1和p2對象上調用equals方法,它將返回true。 當您想根據實例變量而不是引用地址將兩個類對象等同時,等於方法測試非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM