2015-06-03 52 views
1

我只是產生一些equals方法,想知道是否這將是最好用Objects.equals()方法與Java比較領域7.使用Java 7的Objects.equals比較字段?

Eclipse的生成等於這樣的:

public class A 
{ 
    private String a; 
    private String b; 

    @Override 
    public boolean equals(Object obj) 
    { 
     if(this == obj) 
      return true; 
     if(obj == null) 
      return false; 
     if(getClass() != obj.getClass()) 
      return false; 
     A other = (A)obj; 
     if(a == null) 
     { 
      if(other.a != null) 
       return false; 
     } 
     else if(!a.equals(other.a)) 
      return false; 
     if(b == null) 
     { 
      if(other.b != null) 
       return false; 
     } 
     else if(!b.equals(other.b)) 
      return false; 
     return true; 
    } 
} 

我想知道,如果這將是良好的做法:

public class A 
{ 
    private String a; 
    private String b; 

    @Override 
    public boolean equals(Object obj) 
    { 
     if(this == obj) 
      return true; 
     if(obj == null) 
      return false; 
     if(getClass() != obj.getClass()) 
      return false; 
     A other = (A)obj; 
     return Objects.equals(a, other.a) && Objects.equals(b, other.b); 
    } 
} 

你怎麼看?我試圖測試它的性能,但它沒有顯示出差異。

回答

3

是的,這是一個很好的做法。通過這種方式,除了額外的方法調用,大多數情況下JIT編譯器可以輕鬆地內聯外,equals方法看起來更清晰,沒有任何缺點。請注意,Objects.equals首先出現在Java 7中,而不是Java 8.

+0

謝謝,更改了版本! – Mathis

+1

還要注意'Objects.hashcode(T ... obj)''是一個很好的補充。 – Kayaman

+0

是的,並且在重寫equals時應該始終實現'hashCode'。 –