Tiene razón en que las primitivas son tratadas de manera diferente. El siguiente funcionaría:
(Integer)(int)input.charAt(i);
La diferencia es que cuando el argumento es un int
, (Integer)
cajas el entero. En realidad, no es un yeso aunque parezca así. Pero si el argumento es un char
, entonces sería un intento de lanzamiento; pero las primitivas no se pueden convertir en objetos y, por lo tanto, no funcionan. Lo que puede hacer es primero emitir el char
a int
- este molde está bien ya que ambos son tipos primitivos - y luego el int
se puede encasillar.
Por supuesto, char
->Integer
boxeo podría se han hecho trabajar. "¿Por qué no?" es una buena pregunta Probablemente se habría utilizado poco para dicha característica, especialmente cuando la misma función se puede lograr siendo un poco más explícita. (debe char
->Long
trabajo demasiado, entonces y char
->Short
caracteres son de 16 bits, por lo que este sería el más sencillo??.)
respuesta a editar: la ventaja de clases de envoltura es primitivas que envueltos se pueden tratar como objetos: almacenados en un List<Integer>
, por ejemplo. List<int>
no funcionaría, porque int
no es un objeto. Entonces, quizás una pregunta aún más relevante sería, ¿qué hacen los no objetos primitivos en un lenguaje OO? La respuesta está en el rendimiento: las primitivas son más rápidas y toman menos memoria. El caso de uso determina si la conveniencia de los objetos o el rendimiento de los primitivos es más importante.
Interesante.Hubiera pensado que podría ser en caja automática. – DerMike