2012-05-08 21 views
11

Considerate le seguenti due righe di codiceIl che ha prestazioni migliori:!! Prova = null o null = test

if (test ! = null) 

e

if (null != test) 

è che non c'è alcuna differenza di sopra due affermazioni, le prestazioni saggio? Ho visto molte persone usare il dopo e, quando interrogati, dicono che è una buona pratica senza una solida ragione.

+3

Questo è un duplicato di http://stackoverflow.com/questions/2369226/null-check-in-java, eccetto che questo sta usando! = Invece di uguali. –

+0

Domanda simile http://stackoverflow.com/questions/15518958/null-check-coding-standard/15519045 –

+0

Mentre siamo sulla questione delle migliori pratiche, potresti iniziare ad aggiungere spazi tra "se" e " ("Accoppiare questo cambiamento di stile del codice minore con le convenzioni di codifica java renderà anche il più selettivo revisore di codice (io) non ha nulla da dire sulle sue dichiarazioni if ​​http://www.oracle.com/technetwork/java/javase/ documentazione/codeconventions-142311.html # 449 – Russ

risposta

20

Nessuna differenza.

Il secondo è semplicemente perché C/C++ in cui i programmatori hanno sempre eseguito l'assegnazione anziché il confronto.

E.g.

Mentre il compilatore java genera un errore di compilazione.

Quindi personalmente preferisco il primo a causa della leggibilità, le persone tendono a leggere da sinistra a destra, che leggono come if test is not equal to null anziché null is not equal to test.

+0

Grazie, contrassegnerò questa risposta come risposta –

2

Secondo, mi sembra come "condizione Yoda", ovvero if(2 == x) ... ed è molto meno leggibile.

3

Non c'è alcuna differenza di prestazioni, ma personalmente trovo che la seconda sia confusa.

1

È consigliabile evitare alcuni errori di battitura di base che verranno rilevati dagli IDE più moderni, poiché a volte si desidera effettuare confronti tra tipi più complessi che non sono nulli e che terminano con assegnazioni accidentali. Quindi il pattern rimane lo stesso, ma non l'ho mai visto legato alle prestazioni e non ho mai visto generare codice byte speciale.

L'idea è di avere il valore statico, noto per primo, quindi non è possibile lanciare alcun tipo di strana eccezione quando si esegue il confronto.

Tuttavia, nessuno dei due metodi è "più corretto", quindi spetta esclusivamente a te decidere cosa desideri utilizzare.

20

Sono esattamente uguali. Il secondo può avere senso quando si utilizza eguali:

if("bla".equals(test)) 

potrà mai gettare un NullPointerException considerando quanto segue:

if(test.equals("bla")) 

può.

+0

Grazie +1. Questo ha senso –

1

non c'è differenza. Ma in secondo luogo si evita l'errore di battitura come test = null. In secondo luogo, si otterrà l'errore del compilatore.

+0

A meno che "test" non sia un oggetto di tipo java.lang.Boolean, si otterrà un errore del compilatore nel primo caso Object test = null; \t \t if (test = null) { \t \t \t // non viene compilato. Impossibile convertire Oject in booleano \t \t} – Polygnome

1

Non è consigliabile utilizzare quest'ultimo. Entrambi sono equivalenti, ma il primo è più facile da leggere.

Questa "best practice" deriva da C in cui booleano non esiste. Vengono invece utilizzati i numeri interi e if (foo = 1) non è un errore di sintassi, ma è completamente diverso da if (foo == 1).

In Java, solo le espressioni booleane possono essere all'interno di un if e questa pratica non ha molto senso.

0

Non esiste una differenza tra due forme. Non ci sono problemi di prestazioni ma ci sono le seguenti note:

  • Il primo modulo è leggibile per il lettore di codice, perché la gente di solito legge i codici da sinistra a destra.
  • seconda forma è meglio per lo scrittore di codice, perché in java = operatore di assegnazione e == operatore per la prova equivalente, ma la gente di solito utilizzando in if dichiarazione = invece di ==, dal secondo sviluppatore approch ottenere Compile-Time-Error perché nulla non può utilizzare in Left-Side di un estratto conto.
Problemi correlati