2015-11-24 35 views
5

Qual è la differenza tra Boxing e AutoBoxing in Java? Diversi libri di certificazione Java utilizzano due di questi termini. Si riferiscono alla stessa cosa che è il pugilato?Qual è la differenza tra Boxing e AutoBoxing in Java?

+0

è Unboxing, non Boxing – Bikku

+1

@UUIIUI ci sono entrambi – fge

+2

@Tunaki Bene, non necessariamente.Questo può essere considerato il pugilato: "Integer i = new Integer (1);" e questo autoboxing "Integer i = 1;". Comunque questa è solo semantica irrilevante. – Kayaman

risposta

10

boxe è il meccanismo (cioè dal int a Integer); autoboxing è la caratteristica del compilatore con cui genera il codice di boxing per te.

Per esempio, se si scrive in codice:

// list is a List<Integer> 
list.add(3); 

poi il compilatore genera automaticamente il codice di boxe per voi; il "risultato finale" in codice sarà:

list.add(Integer.valueOf(3)); 

Una nota sul perché Integer.valueOf() e non new Integer(): in fondo, perché il JLS dice così :) Citando section 5.1.7:

Se il valore p boxed è vero, falso, un byte o un carattere nell'intervallo \ u0000 a \ u007f, o un numero int o breve tra -128 e 127 (compreso), quindi lasciare r1 e r2 essere i risultati di qualsiasi due box ing conversioni di p. È sempre il caso che r1 == r2.

E non è possibile far rispettare questo requisito se si utilizza un costruttore "mero". Un metodo factory, come Integer.valueOf(), can.

+0

Perfettamente inserito. .. –

+0

Con un buon esempio .. :) –

5

A mio parere, "Boxing" significa "che costruisce esplicitamente un wrapper attorno a un valore primitivo". Per esempio:

int x = 5; 
Integer y = new Integer(x); //or Integer.valueOf(x); 

Nel frattempo, "Autoboxing" significa "implicitamente la costruzione di un wrapper per un valore di base". Ad esempio:

Integer x = 5; 
0

Autoboxing è la conversione automatica che il compilatore Java rende tra i tipi primitivi e le loro classi involucro corrispondente oggetto. Ad esempio, convertendo un int in un intero, un doppio in un doppio e così via. Se la conversione va dall'altra parte, questo è chiamato unboxing.

ref...

0
  • Unboxing è la conversione da wrapper di classe per il tipo di dati primitivo. Per esempio. quando si passa un intero quando è previsto un int.
  • Autoboxing è la conversione automatica da un tipo di dati primitivo nella relativa classe wrapper corrispondente. Per esempio. quando si passa un int quando è previsto un oggetto Integer.