2010-05-21 39 views
5

Qualcuno può spiegarmi l'utilizzo di Integer, Booleano ecc in luogo dei loro tipi primitivi in ​​JAVA?Oggetto o tipo primitivo

Non riesco a cogliere i vantaggi che stanno fornendo. Sembrano creare problemi inutili di gestione di valori nulli.

Grazie!

risposta

8

Boolean, Integer, Long, ... sono oggetti. Puoi utilizzarli in luoghi in cui non puoi utilizzare tipi primitivi, ad es.

  • loro memorizzazione in una raccolta come un Map
  • utilizzandoli come parametro di template
  • assegnando loro un null valore
  • utilizzarli in modo più generale (ad esempio Long come Number)

Esempi:

new ArrayList<Integer>(); 
Long id = null; 
Number num = new Long(3); 
+0

Per aggiungere alla risposta, un esempio pratico memorizzerà le variabili nel contesto della sessione in un'applicazione web. – saugata

+0

Non solo Map, tutte le classi contenitore richiedono che i loro elementi siano Object, quindi il tipo primitivo non può soddisfare questo vincolo. E i contenitori, penso, sono un aspetto in cui il linguaggio orientato agli oggetti è in grado di travolgere il linguaggio delle procedure, cosa che ti porta molta convenienza. :-) –

4

Il fondamento logico di Integer, Boolean e così via consente di utilizzare tipi primitivi in ​​contesti che richiedono un tipo di riferimento. Il classico caso d'uso sono le API di raccolta che forniscono insiemi, elenchi, mappe, code e così via in cui il tipo di elemento deve essere un tipo di riferimento.

Così posso scrivere:

List<Integer> list = new ArrayList<Integer>(); 

ma il seguente è un errore di compilazione:

List<int> list = new ArrayList<int>(); 

Si noti che questo caso d'uso per i tipi di wrapper primitive precede entrambi i tipi generici e il "nuovo "API di collezioni e torna ai giorni in cui gli unici tipi di raccolta erano le forme originali (pre-generiche) di Vector e Hashtable e il loro tipo.

4

A volte è necessario disporre di un valore come annullabile, ad esempio se l'app memorizza i dati dell'utente, un codice di sicurezza sociale potrebbe essere sconosciuto. In tal caso è più pulito memorizzare null anziché -1.

Inoltre ci sono cose che non si possono fare con i tipi primitivi, come memorizzarli in una mappa o usare il polimorfismo (Double e Integer sono entrambe istanze di Number).

1

primitive sono sempre più veloci.
tuttavia ci sono dei momenti in cui gli oggetti sono veramente utili:
1. upcasting. La tua funzione può prendere Numero (è un genitore per tutti gli oggetti numerici: Intero, Virgola mobile, ecc.) Per un argomento.
2. Possibile valore nullo. Ad esempio viene utilizzato durante l'archiviazione nel database. L'oggetto può essere nullo, i primitivi devono avere un valore. Quindi se il campo in db è annullabile, è meglio usare la versione dell'oggetto del valore primitivo.
3. Se la funzione prende oggetto e si dà sempre una primitiva ci sono delle spese per l'autoboxing (trasformando la primitiva in oggetto). Lo stesso per il ritorno dalla funzione.
4. Gli oggetti hanno determinati metodi, come getHashcode(), toString() ecc., Che può essere davvero utile in alcuni casi.

Problemi correlati