Hai ragione che le primitive sono trattate in modo diverso. Questa situazione funziona:
(Integer)(int)input.charAt(i);
La differenza è che quando l'argomento è un int
, (Integer)
scatole il numero intero. In realtà non è un cast anche se sembra che sia. Ma se l'argomento è un char
, allora sarebbe un tentativo cast; ma i primitivi non possono essere lanciati sugli oggetti e quindi non funziona. Che cosa è possibile do è prima di trasmettere il char
a int
- questo cast è corretto poiché entrambi sono tipi primitivi - e quindi il int
può essere inserito.
Naturalmente, char
->Integer
boxe poteva sono stati fatti lavorare. "Perchè no?" è una bella domanda Probabilmente ci sarebbe stato poco uso per tale caratteristica, specialmente quando la stessa funzione può essere ottenuta essendo un po 'più esplicito. (dovrebbe char
->Long
funziona troppo, allora e char
->Short
caratteri sono a 16 bit, quindi questo sarebbe più semplice??.)
Risposta da modificare: il vantaggio di classi wrapper è primitive che avvolte possono essere trattati come oggetti: memorizzati in un List<Integer>
, per esempio. List<int>
non funzionerebbe, perché int
non è un oggetto. Quindi forse una domanda ancora più pertinente sarebbe, che cosa fanno i non-oggetti primitivi in un linguaggio OO? La risposta è in termini di prestazioni: le primitive sono più veloci e richiedono meno memoria. Il caso d'uso determina se la convenienza degli oggetti o l'esecuzione delle primitive è più importante.
fonte
2011-12-15 10:45:38
Interessante.Avrei pensato che potesse essere auto inscatolato. – DerMike