Java tiene ambos objetos, Entero y versión primitiva, int, de tipos básicos.Implementación de Java Primitive
Las versiones primitivas son más rápidas/más ligeras/etc. así que, en general, deberías usarlos.
Lo que me pregunto es por qué los diseñadores de Java no solo tienen los tipos de objeto y usan las versiones primitivas como optimizaciones detrás de escena.
Así:
Integer foo(Integer alpha)
{
Integer total = 0;
for(Integer counter = 0; counter < alpha; counter++)
{
total += counter;
}
return total;
}
serían compilados en código algo como:
int foo(int alpha)
{
int total = 0;
for(int counter = 0; counter < alpha; counter++)
{
total += counter;
}
return total;
}
En esencia, esta hipotética compilador Java convertiría a instancias de Integer, Double, Float, etc en los tipos primitivos equivalentes . Solo en los casos donde los objetos eran realmente necesarios (digamos para poner el elemento en un contenedor) se involucrarían los objetos enteros reales.
NOTA: el código anterior ha utilizado operadores en objetos enteros que sé que no está permitido. Como estoy inventando hipotéticos compiladores de Java, haré de cuenta que este tiene una carcasa especial para Integer/Float/Double como lo hace para String.
No es un duplicado exacto , pero cubro mucha de esta información en http://stackoverflow.com/questions/5199359/why-do-people-still-use-primitive-types-in-java – corsiKa
@glowcoder, sé todo eso. Pero me pregunto si algo habría impedido que Java hiciera todo esto detrás de escena y no nos preocupara por eso. Es decir, no es necesario que tengamos problemas de rendimiento, ya que parece sencillo para el compilador convertir los usos de Long en long por sí mismo. –
un gran problema es que su ejemplo es simplemente simplista. Estoy muy contento de que Java tenga primitivos; se asignan directamente al hardware y nunca los vi como un obstáculo. Pedir la herramienta de análisis de escape extrema es simplemente pedir demasiado. imagina el entero [], qué tan fácil crees que sería optimizar, escapar analizarlo y generar el mismo código que int [] (beisides que el entero puede ser nulo). Morealso Integer es inmutable y tiene un campo final que evita algunas optimizaciones y requiere aún más análisis. – bestsss