float - primitive data types java
Tipos primitivos de Java: int vs. Integer (6)
Estoy confundido acerca de cuándo usar tipos primitivos frente a no primitivos (?) (Es decir, int vs. Integer) en Java. Me doy cuenta de que en algunos lugares no se pueden usar tipos primitivos (por ejemplo, cuando se usan generics ). Pero ¿qué pasa con el código "normal"? ¿Existe una penalización de rendimiento por el uso de tipos no primitivos? ¿Qué pasa cuando se trabaja con Android?
*** Mi pregunta es muy similar a esta question , que fue descubierta por uno de los carteles a continuación. Las respuestas a la pregunta vinculada proporcionan información adicional sobre esta pregunta, que no se tratan a continuación.
*** Los tipos "no primitivos" se denominan oficialmente tipos de referencia.
Como un purista de OO, es probable que usted evite los primitivos y maldiga los costos de rendimiento y la falta de operadores de postfix. (Sí, hay un costo de rendimiento). También puede adoptar este enfoque simplemente a partir de consideraciones de extensibilidad como diseñador (sin que necesariamente esté pendiente de la pureza).
Como cuestión práctica (fuera de las cuestiones teóricas y estéticas), use los primitivos en todos los lugares que pueda y use la versión del objeto donde no pueda usar los primitivos. (Ya mencionó uno de estos casos. El lenguaje y las API impulsarán esta decisión).
Como un fanático del rendimiento, es probable que rechacen las versiones de los objetos y que realmente no le importe demasiado si pisa algunas reglas de oro OO y no va a dejar de hacerlo: el rendimiento es el rey y toma las decisiones correspondientes.
¡Recomendaría la opción 2 como un buen lugar para comenzar hasta que desarrolle sus propias preferencias dogmáticas! :)
En Java, int
es un tipo de datos primitivo, mientras que Integer
es una clase Wrapper.
int
, siendo un tipo de datos primitivo tiene menos flexibilidad. Solo podemos almacenar el valor binario de un entero en él. Dado que Integer
es una clase de envoltorio para el tipo de datos int
, nos da más flexibilidad para almacenar, convertir y manipular datos enteros. Integer
es una clase y, por lo tanto, puede llamar a varios métodos incorporados definidos en la class
. Las variables de tipo Integer
almacenan referencias a objetos Integer
, al igual que con cualquier otro tipo de referencia (objeto).
Puedes encontrar una explicación más detallada here .
Hay una ligera penalización por la conversión entre los tipos ( autoboxing ). También int
tendrá un poco menos de gastos generales, así que siempre iría con int
si puedes.
También vea esta pregunta: question
Los tipos no primitivos son objetos. Tienen que ser asignados dinámicamente, recolectar basura, y verificarse en ausencia de nulos (aunque algunas de estas operaciones pueden ser eliminadas por un compilador de optimización). Leer su valor real requiere cargar desde un puntero. Los tipos primitivos son valores. Por lo general, ocupan menos espacio y son de acceso más rápido.
Una buena regla general es usar tipos primitivos a menos que necesite polimorfismo, en cuyo caso use el objeto correspondiente.
Mi punto de vista: usar Integer como parámetros o valores de retorno permite una cosa que no permiten las primitivas: usar null
. ¿Pero es ésta una buena idea? Creo que rara vez lo es.
En lo que respecta al rendimiento: el compilador optimizará su código hasta cierto punto, por lo que la mayor parte del tiempo no es una preocupación real.
Respuesta corta: Un int
es un número; un Integer
es un puntero que puede hacer referencia a un objeto que contiene un número. Usar Integer
para aritmética implica más ciclos de CPU y consume más memoria. Un int
no es un objeto y no se puede pasar a ningún método que requiera objetos (como lo dijo sobre Genéricos).