2013-07-23 7 views
6

Permettetemi innanzitutto di inizio con un codice di esempio ...Java - Stile di codifica: quali sono i contro e i pro del confronto di stringhe di stile "ABC" .equals ("SOMESTRING")?

String password = ""; 

if("PIRATE".equals(password)) { 
    // Do something 
} 

vedere qui, il String costante o letterale (qualunque cosa) "pirata" viene utilizzato per verificare l'uguaglianza delle due stringhe. Mentre ...

String password = ""; 
if(password.equals("PIRATE")) { 
    // Do something 
} 

questo funziona anche esattamente come il codice precedente.

Oggigiorno, vedo molto del primo stile "STRING_LITERAL" .equals (STRING_OBJECT), mentre le persone Java inviano il codice.

Quindi la mia domanda è, Da dove viene questo stile? e È meglio del secondo stile in alcun modo?

In effetti trovo il secondo stile più logico del primo, perché?!

consente di dare un requisito del genere, se l'utente fornito-password è uguale al "pirata" poi dare il permesso di quell'utente

quando si avvia l'attuazione del requisito di cui sopra,

String userProvidedPassword = getPaswordFromUser(); 

if(userProvidedPassword.equals("PIRATE")) { 
// Allow him 
} 

Non è più logico di "PIRATE" .equals (userProvidedPassword);?! Basti pensare che ...

mi corregga se sbaglio .. Grazie ..


EDIT: Scusate, this question non è venuto nella mia ricerca precedente, e risponde alla mia domanda perfettamente. Anche grazie a tutti quelli che hanno dato una mano qui ..

+0

Si evita un controllo nullo esplicito. Questo rende più conciso il codice. –

+1

Con questo: 'userProvidedPassword.equals (" PIRATE ")' è necessario un ulteriore controllo nullo: 'userProvidedPassword! = Null && userProvidedPassword.equals (" PIRATE ")' – NINCOMPOOP

risposta

8

Quando si scrive password.equals("PIRATE") si è quasi chiedendo un NullPointerException, dove ci sono possibilità per password forza null.

Si tratta di evitare NullPointerException.

if("PIRATE".equals(password)) { 
    // Do something 
} 

Evita NullPointerException

dove come

if(password.equals("PIRATE")) { 
    // Do something 
} 

thrwos si NullPointerException se password è null.

Tuttavia, Personalmente ritengo che questo sia strano nel mezzo del codice. e preferisco sempre scrivere

if(password !=null && password.equals("PIRATE")){ 

//do something 

} 
+1

Ottima risposta, buon lavoro. –

+1

grazie suresh .. che spiega .. – Dreamer

+0

@Dreamer Glad, potrei aiutarti :) –

16

"PIRATE".equals(password) non può dare come risultato NullPointerException.

mentre

password.equals("PIRATE") lancerà una NullPointerException se password sembra essere null.

Pertanto l'uso del primo è incoraggiato: è più sicuro.

+0

Ottima risposta, non l'avevo mai realizzato prima. Il senno di poi è 20/20, ora sembra ovvio! –

+0

eccellente .. grazie .. anche io non ho pensato in questo modo .. tra l'altro cosa si può fare per il problema ** stringa hardcoding ** durante l'utilizzo di questo stile? – Dreamer

+1

Utilizzare una costante anziché la stringa hardcoded – bowmore

3

L'unico inconveniente è davvero un problema di stile. Dicendo "PIRATE" .equals (password) si chiama Yoda Condition. Tuttavia, come hanno già affermato le persone, è più sicuro usare quel tipo di condizione (quindi continuerei a usarlo).

+1

+1 Per menzionare la condizione Yoda! – NINCOMPOOP

Problemi correlati