2010-09-04 13 views
5

Sono entrambi i metodi di confronto stringa qui sotto considerati ugualiString 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); 
    } 
} 

o dovrebbe un tipo di confronto essere favorito rispetto ad un altro?

risposta

18

È necessario chiamare equals sulla costante poiché evita il rischio di NullPointerException quando testVal è nullo.

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

Un vantaggio di quest'ultimo è che non genererà un'eccezione se testVal è nullo.

Mi aspetto che i risultati siano gli stessi, a parte questo.

0

Quando un valore costante si confronta con un altro valore, si è quasi certi di non avere valore nullo.

Nel tuo caso,

new TestString().testString1(null); 

un'eccezione, mentre,

new TestString().testString2(null); 

solito.

Ma questo tipo di notazione potrebbe essere considerato come a yoda condition.

2

A prima vista Sono d'accordo con @ Jon Skeet, ma poi ho notato che CONSTVAL non è definitiva.

Se era finale, testString2() è il modo più sicuro e migliore per testare l'uguaglianza.

+0

Il mio errore, avrei dovuto aggiungere finale alla const val – Pram

+0

mi mancava troppo :) –