davide.fruci ha scritto:
Con unboxing intendi un cast implicito?
No, non è un banale "cast". Passare da int a Integer (o viceversa) è sempre stato possibile in Java, in qualunque release. Da Java 5 esiste il auto-boxing/unboxing che rende più facilmente interscambiabili i primitivi con le rispettive classi "wrapper" ma semplicemente perché è il compilatore che genera codice "nascosto" per fare questo passaggio.
Integer i = new Integer(123); // qualunque versione di Java
Integer i = 123; // solo da Java 5
quest'ultimo viene tradotto dal compilatore in:
Integer i = Integer.valueOf(123);
Questo valueOf è stato introdotto da Java 5. Il compilatore non emette un banale new Integer(...) ma usa valueOf, che tra l'altro usa internamente un basilare meccanismo di caching per un certo range ridotto di valori.
Idem, cioè similare, per gli altri primitivi.
davide.fruci ha scritto:
I tipi di dato primitivi, in Java, sono otto: byte, short, int, long, float, double, boolean, char.
Che differenza c'è tra un int ed un Integer? Per quello che so il primo non è un oggetto, mentre il secondo sì.
Semplicemente per ciascun primitivo è stata fatta una classe in java.lang che incapsula quel valore primitivo (e la cui classe offre anche altri metodi utili). Tutto qui.
davide.fruci ha scritto:
Inoltre, quest'ultimo risulta essere immutabile.
Sì, le classi "wrapper" dei primitivi e anche String sono "immutabili". È stato scelto così .... l'immutabilità in generale (e specialmente per dei "value" object piccoli e basilari come questi) ha notevoli vantaggi.
davide.fruci ha scritto:
Perché con gli ArrayList e gli Iterator bisogna usare Interger e non int?
Le collezioni, fin dall'inizio, trattavano solo "oggetti" (Object). I generics introdotti da Java 5 trattano solo tipi reference, quindi di nuovo oggetti, niente primitivi (List<Integer> SÌ, mentre List<int> NO).
davide.fruci ha scritto:
Integer non può essere definito un tipo di dato quindi..
Integer è un "tipo reference", esattamente come String, Date, File, URL, ecc....
Non è un tipo di "prima classe", se intendi in questo senso, come i tipi primitivi, non riceve cioè alcun trattamento particolare, a parte il auto-boxing/unboxing che comunque porta solo alla generazione di codice "dietro le quinte", come si dice.