Java Objects.equals()的作用---避免空指針異常


 重寫equals()和hashCode()需要注意的地方。
 看為啥會有問題。

private int rule_type;  
private String value;  
  
@Override  
public boolean equals(Object o) {  
    if (this == o) return true;//指向同一個地址,引用相同,那就是同一個對象咯  
    if (!(o instanceof ClassName)) return false;  
    ClassName that = (ClassName) o;  
    return rule_type == that.getRule_type() && value.equals(that.getValue());//可能出空指針的地方各個屬性都相同了,說明也是一個同一個對象雖然地址不同  
}  
  
@Override  
public int hashCode() {  
    return Objects.hash(getRule_type(), getValue());  
}  

怎么解決:

Objects.equals(value, that.getValue());  

why:

//看這個Objects.equals的源碼如下  
   public static boolean equals(Object a, Object b) {  
       return (a == b) || (a != null && a.equals(b));  
   } 

做了空判斷。
java 就是 天天的空指針啊。

 

總結:

用哪幾個屬性來區別判斷是不是相同的,就用哪幾個屬性來生成hashcode,
並且判斷2個對象是不是相同的條件就是這幾個屬性,只有,幾個屬性都相同的情況下,這2個對象就相等。

 

經過后來我看到guava包的時候,也看到了guava里面做了如下實現,發現上面的這個Objects.equals()方法是自 java 1.7才開始的,估計是借鑒guava的實現的吧。

 

 

[j


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM