En Java eficaz de Joshua Bloch , Elemento 5: "Evite crear objetos innecesarios", publica el siguiente ejemplo de código:
public static void main(String[] args) {
Long sum = 0L; // uses Long, not long
for (long i = 0; i <= Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);
}
y tarda 43 segundos en ejecutarse. Tomar el Long en la primitiva lo reduce a 6.8 segundos ... Si eso es una indicación de por qué usamos primitivas.
La falta de igualdad de valor nativo también es una preocupación ( .equals()
es bastante detallada en comparación con ==
)
para biziclop:
class Biziclop {
public static void main(String[] args) {
System.out.println(new Integer(5) == new Integer(5));
System.out.println(new Integer(500) == new Integer(500));
System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
System.out.println(Integer.valueOf(500) == Integer.valueOf(500));
}
}
Resultados en:
false
false
true
false
EDITAR ¿Por qué (3) regresa true
y (4) regresa false
?
Porque son dos objetos diferentes. Los 256 enteros más cercanos a cero [-128; 127] son almacenados en caché por la JVM, por lo que devuelven el mismo objeto para ellos. Sin embargo, más allá de ese rango, no se almacenan en caché, por lo que se crea un nuevo objeto. Para hacer las cosas más complicadas, el JLS exige que se almacenen en caché al menos 256 pesos mosca. Los implementadores de JVM pueden agregar más si lo desean, lo que significa que esto podría ejecutarse en un sistema donde los 1024 más cercanos se almacenan en caché y todos devuelven verdadero ... #awkward