2010-09-04 12 views
5

Sind beide String Vergleich unter Methoden betrachtet gleich zu seinStringvergleich um in Java

public class TestString { 
    public static final String CONSTVAL="foo"; 

    public boolean testString1(String testVal) { 
     return testVal.equalsIgnoreCase(CONSTVAL); 
    } 

    public boolean testString2(String testVal) { 
     return CONSTVAL.equalsIgnoreCase(testVal); 
    } 
} 

oder sollte eine Art von Vergleich gegenüber einem anderen bevorzugt werden?

Antwort

18

Sie sollten Equals auf der Konstante aufrufen, da das Risiko von NullPointerException vermieden wird, wenn testVal null ist.

public boolean testString2(String testVal) { 
    return CONSTVAL.equalsIgnoreCase(testVal); 
} 
5

Ein Vorteil des letzteren ist, dass es keine Ausnahme auslöst, wenn testVal Null ist.

Ich würde erwarten, dass die Ergebnisse die gleichen sein werden, abgesehen davon.

0

Wenn ein konstanter Wert sich mit einem anderen Wert vergleicht, sind Sie fast sicher, keinen Nullwert zu haben.

In Ihrem Fall

new TestString().testString1(null); 

wird eine Ausnahme werfen, während

new TestString().testString2(null); 

gewohnt.

Aber diese Art der Notation könnte als a yoda condition.

2

Auf den ersten Blick betrachtet werden ich mit @ Jon Skeet zustimmen würde, aber dann bemerkte ich, dass CONSTVAL nicht endgültig ist.

Wenn es endgültig war, dann ist testString2() der sicherste und beste Weg, um auf Gleichheit zu testen.

+0

Mein Fehler, ich hätte das Finale zu der Konstante – Pram

+0

hinzugefügt, ich habe das auch vermisst :) –

Verwandte Themen