簡體   English   中英

比較兩個對象引用的常見情況

[英]Common case for comparing two objects references

除了檢查null( something == null )時,我們何時在Java中使用對象引用比較?

我想不出任何使用對象引用比較的情況。 對於我來說,抽象所有內存分配的語言似乎有點奇怪。

  1. 比較單例 - 單例應該只有一個實例,可以檢查身份而不是相等。
  2. 比較枚舉(枚舉是單身)
  3. 在某些equals方法本身,如( AbstractList ):

     public boolean equals(Object o) { // Checking identity here you can avoid further comparison and improve performance. if (o == this) return true; if (!(o instanceof List)) return false; ListIterator<E> e1 = listIterator(); ListIterator<?> e2 = ((List<?>) o).listIterator(); while (e1.hasNext() && e2.hasNext()) { E o1 = e1.next(); Object o2 = e2.next(); if (!(o1==null ? o2==null : o1.equals(o2))) return false; } return !(e1.hasNext() || e2.hasNext()); } 

它比完全等於比較更快。

推理很簡單,如果兩個對象相同,它們必須相等。 因此,它經常用於equals實現,但也可用於比較J-Alex已經指出的枚舉。

當我們需要查看兩個值是否引用同一個對象時,將Object引用與==比較非常有用。

對於對象引用, ==的使用通常限於以下內容:

  1. 檢查引用為空。
  2. 比較兩個枚舉值,因為每個枚舉常量只有一個對象。
  3. 檢查兩個引用是否屬於同一對象。

此外,默認情況下, Object#equals()僅使用==運算符進行比較。 必須重寫此方法才能真正有用:

public boolean equals(Object obj) {
    return (this == obj); // Comparing object references by default
}

暫無
暫無

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

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