Informazioni più specifiche per Java:
Autoboxing permette java per convertire automaticamente le cose come boolean
e int
alle loro versioni Object Boolean
e Integer
automaticamente nella maggior parte dei casi. Permette anche il contrario.
Ad esempio:
int a = 3; // no boxing is happening
Integer b = 3; // newer versions of java automatically convert the int 3 to Integer 3
int c = b; // these same versions also automatically convert Integer 3 to int 3
più vecchio versioni di Java che non hanno autoboxing richiederà questo codice per fare la stessa cosa:
int a = 3; // works the same
Integer b = new Integer(3); //must set up a Integer object manually
int c = b.intValue(); //must change Integer object to a primitive
Tuttavia, ci sono alcuni scenari in cui si hanno ancora fare le cose manualmente. Per esempio, immaginate di avere una classe con due metodi in questo modo:
assertEquals(int a, int b);
assertEquals(Object a, Object b)
Ora, se si tenta di fare questo:
Integer a = 3;
int b = 3;
assertEquals(a, b); // this will not compile
La ragione per cui questo non funziona è perché non può capire se è necessario unbox a
a int
o casella b
a Integer
. Pertanto è ambiguo che si debba chiamare la firma del metodo. Per risolvere questo problema si può fare uno di questi:
assertEquals((int) a, b);
assertEquals(a, (Integer) b);
fonte
2009-09-13 17:37:15