2014-12-06 131 views
3

我已經與C#稍微休息一下後,返回到的Java的時候,我已經厭倦了寫東西一樣a.equals(b),所以我在想,等於有辦法使用==運算符而不會破壞我的程序。==還是比較最終靜態字段

這裏是我的情況:

public static class A { 
    public final static A STATIC_FIELD = new A(prop1, prop2); 

    public A method(int param){ 
     return (param > 0.5) ? STATIC_FIELD : new A(prop1, prop2); 
    } 
} 

現在,我可以在下面的代碼片段與==取代equals,因爲我指的是同一個對象還是錯?

.... 
private bool method(){ 
    A aInstance = getAInstance(); 
    int param = Math.Random(); 
    return aInstance.method(param).equals(A.STATIC_FIELD); 
} 
.... 

什麼,如果STATIC_FIELD在從enum採取了價值?

回答

0

如果您不覆蓋equals()方法,則equals()==執行同樣的操作,請檢查引用的相等性。你可以在這種情況下進行替換,因爲如果它爲true,method()將返回與A.STATIC_FIELD相同的引用。見this answer

1

你應該避免==(好吧,讓我們同意,你知道它:-)),也相對於獨居情況下,你可能會「忘記」後來,它是通過單創建。但我會給你一個提示。相反的:

if ((var != null) && (var.equals(A.STATIC_FIELD))) 

你可能會寫:

if (A.STATIC_FIELD.equals(var)) 

就像許多人沒有意識到,比較字符串他們可能會使用:

if ("static string".equals(varString)) 

您也可以使用的java.util .Objects.equals比較對象而沒有檢查這些空值的負擔。

3

這取決於你想要做什麼。

如果需要檢查,如果這是完全一樣的對象,請使用直接比較。如果您需要檢查對象是否包含相同的內容(如字符串或數字),則應使用.equals。

這些方法

最常見的錯誤似乎與字符串比較,其中.equals如果字符串有相同的內容,但==只有當這是字符串相同的實例返回true,返回真來了。

0

不,你不能使用==代替equals()方法監守當我們使用==在Java中,我們實際上是比較對象的內存地址,因此,如果該方法返回STATIC_FIELD然後它會正常工作,其靜態對象而且地址在任何地方都是一樣的。 但當方法將返回的則新對象的地址不會匹配,即使內容是類中相同的,因爲新的A(參數1,參數2)堅持JVM在不同的存儲位置,以創建新的對象

+0

但是在這裏,method()不返回A的新實例(當爲true時),它返回靜態字段。 – 2014-12-06 18:47:47

+0

只有當參數值大於.5時纔會返回STATIC_FIELD,否則它將返回一個新對象 – varun 2014-12-06 18:49:56

+0

如果你認爲它總是真的,那麼你可以使用==。但它總是更好地使用等於對象 – varun 2014-12-06 18:52:26

0

==檢查兩個對象是否是相同的實例。如果你想檢查兩個變量是否持有相同的實例(因爲它們可能是你將變量分配給類常量),==可以使用。如果您的變量碰巧保留了null,那麼它也不會出錯,所以它的收益超過.equals()

enum的實例是始終不變,和兩個不同情況永遠是平等的,所以==是罰款太使用這些。

相關問題