2012-05-16 13 views
46

Mi sono imbattuto in una classe utilizzando le variabili Integer per acquisire le dimensioni da utilizzare in un ciclo for. Questa è una buona pratica o dovremmo usare il tipo di dati primitivi int?Utilizzo di int vs Integer

Integer size = something.getFields().size(); 
for (Integer j = 0; j < size - 1; ++j) 
+4

Possibile duplicato: ** [int o intero] (http: // stackoverflow.it/a/423718/500725) ** –

+0

viene fornita la classe Integer in modo che i valori possano essere inseriti/disinseriti in modo OO puro. utilizzare int ove appropriato, a meno che non sia specificamente necessario utilizzarlo in modalità OO; nel qual caso Intero è appropriato. –

+0

possibile duplicato di [int o Integer] (http://stackoverflow.com/questions/423704/int-or-integer) –

risposta

65

la classe Integer è fornito in modo che i valori possono essere inscatolati/unboxing in modo OO puro. utilizzare int ove appropriato, a meno che non sia specificamente necessario utilizzarlo in modalità OO; nel qual caso Intero è appropriato.

Java Int vs Integer

Tuttavia, cose molto diverse sono in corso sotto le coperte qui. Un int è un numero; an> Integer è un puntatore che può fare riferimento a un oggetto che contiene un numero.

...

Un int non è un oggetto e non può essere passato a nessun metodo che richiede oggetti . Un caso comune è l'uso delle classi di raccolta fornite ( Elenco, Mappa, Set) - sebbene sia possibile scrivere versioni di queste classi che forniscono funzionalità simili alle versioni dell'oggetto. Le classi wrapper sono spesso richieste ogni volta che viene utilizzata l'introspezione (come nell'API di riflessione).

Una migliore descrizione di quando usare uno contro l'altro:

Scelta tra int e Integer

Comincerò con come questi tipi dovrebbero essere usati prima di entrare nel dettaglio sul perché

  • Preferisco int per motivi di prestazioni
  • metodi che accettano oggetti (tra cui i tipi generici come List<T>) implicitamente richiede l'uso di Integer
  • L'utilizzo di Integer è relativamente a buon mercato per i valori bassi (da -128 a 127) a causa di internato - utilizzare Integer.valueOf(int) e non nuovo Integer (int)
  • non utilizzare == o != con i tipi interi
  • considerare l'utilizzo Integer quando è necessario per rappresentare la assenza di un valore (Null)
  • Attenzione valori interi unboxing in int con null valori
+2

La risposta è molto buona. Si prega di notare il vantaggio in termini di prestazioni nelle applicazioni mobili/limitate alle risorse di utilizzare valori primitivi. –

+0

"Un int non è un oggetto e non può essere passato a nessun metodo che richiede oggetti." Cosa ne pensi di qualcosa Qualcosa (911) ?? oggetto pubblico doSomething (oggetto o) { // fare qualcosa !!! return o; } –

34

Se è possibile utilizzare int farlo. Se il valore può essere null o utilizzato come oggetto, ad es. Generics, utilizzare Integer

Di solito non importa quale si utilizza ma spesso int si comporta leggermente meglio.

+0

Inoltre è banale cambiare avanti e indietro usando 'Integer # intValue (Integer)' e 'Integer # valueOf (int) ' – ametren

+0

Penso che tu intenda' Integer.intValue() ';) Con auto-boxing e unboxing introdotto in Java 5.0, non hai bisogno di farlo. –

+5

In molti casi 'int' si comporta non solo * leggermente *, ma molto meglio, specialmente nei loop stretti :) – dasblinkenlight

1

Promuovere i tipi primitivi sempre dove è possibile.

I tipi primitivi non possono essere utilizzati come GenericArgument o null.

14

Questo approccio non è corretto nella pratica, utilizzare int quando possibile. L'utilizzo di Integer indica che questa particolare variabile può essere null (oppure era all'interno di una raccolta, dannatamente generici ...) - che non è il caso.

Anche l'utilizzo di Integer introduce un ulteriore sovraccarico di boxing e unboxing.

3

Questo è un potenziale disastro in attesa di verificarsi in progetti di grandi dimensioni. Il programmatore qui ha dimenticato che ogni Integer è in realtà un nuovo oggetto, e, per usarlo come int, ci deve essere il pugilato e l'unboxing tutto il tempo. Non solo è inefficiente, ma non funzionerà come previsto. Si consiglia di utilizzare sempre int dove possibile e utilizzare solo Integer per posizionare questi valori in elenchi, contenitori o per l'archiviazione del database. Ricorda, confrontare gli oggetti usando>, < e == significa qualcosa di diverso rispetto a quando stai usando gli stessi operatori per confrontare le primitive.

1

Non utilizzare solo per il ciclo. Utilizzare il tipo primitivo int (prestazioni migliori), che non è lo stesso di Class Integer.

La classe Integer racchiude un valore del tipo primitivo int in un oggetto . Un oggetto di tipo Integer contiene un singolo campo il cui tipo è int.

Inoltre, questa classe fornisce diversi metodi per convertire un int una stringa e una stringa in un int, così come altre costanti e metodi utili quando si tratta di un int.

Quindi, utilizzare Integer se è necessario chiamare le funzioni Integer o la necessità di assegnare un valore nullo ad esso.

Sarà inoltre necessario utilizzare Integer invece di int per i medicinali generici come Lista

1

Quando v'è la necessità di utilizzare oggetti, è è necessario utilizzare le classi wrapper, come Integer, Double, Float, ecc ...

esempio:

int n = Integer.parseInt("10"); 

Qui stiamo convertendo la stringa in un numero intero (tipo Primitive), ma il metodo parseInt (String str) funziona solo sulle classi Wrapper (es. Object), quindi l'abbiamo usato ... ne troverete molti altri in uso in java.

1

Ci può essere una penalizzazione delle prestazioni a causa di boxe e unboxing, poiché si incorre nel sovraccarico di conversione tra un tipo primitivo e un tipo di riferimento.

Tuttavia, la classe Integer aggiunge ulteriori metodi che possono essere molto utili.

0

Normalmente uso l'intero a causa di OO puramente. Le prestazioni di int sono decisamente migliori rispetto alla sua controparte oggetto, ma sono visibili solo quando si esegue il ciclo di milioni di volte nel ciclo.

IMHO, Se la prestazione è di fondamentale importanza nell'applicazione e si desidera spremere anche solo un secondo nano, utilizzare int senza cervello. Ma se l'OO e la leggibilità sono i temi principali, utilizzare Integer.