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?
risposta
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.
Perfettamente inserito. .. –
Con un buon esempio .. :) –
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;
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.
- 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.
è Unboxing, non Boxing – Bikku
@UUIIUI ci sono entrambi – fge
@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