2015-10-14 7 views

risposta

9

Utilizzare qualsiasi metodo sia più leggibile. String.valueOf(i) o Integer.toString(i) rendono il tuo intento molto più chiaro di i + "".

+1

'String.valueOf' è più efficiente di' i + "" '? – Sayakiss

+0

@Sayakiss Non ci dovrebbe essere una differenza di prestazioni saggio (in qualsiasi compilatore decente). Dovresti solo preoccuparti della leggibilità. – Eran

13

Anche se funziona, i + "" è un tipo di hack per convertire int in stringa. L'operatore + su stringa mai progettato per l'utilizzo in questo modo. Utilizzare sempre String.valueOf()

+1

Bella risposta. Inoltre, penso che String.valueOf() sia più pulito. – A1ternat1ve

+0

Se l'operatore '+' non è stato progettato per essere usato in questo modo, non sareste in grado di fare cose come 'System.out.println (" i = "+ i)'. Sarebbe di nuovo come programmare in Modula 2. –

+0

@ ThorbjørnRavnAndersen Sono d'accordo, ma di nuovo sei libero di farlo e funziona assolutamente. Ma sto solo dicendo che è un po 'di abuso per il bene. Ho appena suggerito un modo più pulito :) –

3

Non è solo l'ottimizzazione. Non mi piace

"" + i 

perché non esprime quello che voglio veramente fare.

Non voglio aggiungere un intero a una stringa (vuota). Voglio convertire un numero intero a stringa:

Integer.toString(i) 

Oppure, non è il mio preferito, ma sempre meglio di concatenazione, ottenere una rappresentazione di stringa di un oggetto (intero

String.valueOf(i) 

NB: per il codice che è chiamato molto spesso, come in loop, l'ottimizzazione è sicuro anche un punto per non usare la concatenazione.

3

La cosa non è che se si dispone di un Integer i (non primitive) e utilizzare i + "", yo Si può finire con una stringa non nulla di valore "null" se i è nullo, mentre String.valueOf(...) in questo caso genera NullPointerException.

In tutti gli altri casi è lo stesso (anche molto simile al processo interno che verrà richiamato per restituire il risultato). Dato ciò che è sopra, tutto dipende dal contesto in cui lo si usa, e.x. se si prevede di convertire nuovamente la stringa in int/Integer nel caso +, potrebbe essere più problematico.

Problemi correlati