Tenemos clases de envoltura en Java como Interger, Float ... ¿por qué todavía está apoyando las primitivas que es que stoppting java es un lenguaje completamente orientado a objetos?Cuando tenemos clases de envoltorios, ¿por qué las primitivas son compatibles?
Respuesta
Las envolturas, al ser objetos, se colocan en el montón. Los primitivos son solo "valores" y van en la pila. Esto es más eficiente, porque para las primitivas envueltas en el montón, necesita (al menos) tanto el valor (que está en la pila) como la referencia al objeto contenedor.
Si este aumento del rendimiento importa realmente depende de lo que esté haciendo. Para el trabajo numérico pesado, definitivamente, pero para el 99% de las cosas que hay, esto es más bien una molestia. Por un lado, no puede almacenar primitivos en una colección de todos modos; consiguen autoboxed. Entonces, la única forma de almacenar muchos de ellos es usar arreglos simples, lo que a su vez puede conducir a otros tipos de ineficiencias (por ejemplo, si necesita cambiarles el tamaño).
Porque las primitivas son más livianas y más eficientes en términos de memoria y procesamiento de CPU.
Y debemos tener esto en cuenta al trabajar con dispositivos móviles/de mano. –
Pero también considere si tiene un efecto del 10% o del 0.00001% en una situación particular. Solo optimízate si es importante. –
Una palabra: rendimiento.
Los tipos de envoltura también son inmutables, lo que hace que sea muy costoso si uno quiere usar uno para un contador de bucles, por ejemplo.
La JVM también tiene códigos de operación para hacer aritmética directamente en primitivas.
- 1. ¿Por qué método equals() cuando tenemos == operador?
- 2. Java: ¿Por qué son necesarias las clases de contenedor?
- 3. ¿Por qué las conexiones persistentes no son compatibles con URLLib2?
- 4. ¿Por qué deberíamos usar ui codificado cuando tenemos Specflow?
- 5. ¿Por qué todas las clases anónimas son implícitamente finales?
- 6. ¿Por qué utilizar malloc/free, cuando tenemos new/delete?
- 7. ¿Qué son las clases S1 y S2?
- 8. ¿Por qué algunos sitios web no son compatibles con iPad?
- 9. ¿Por qué los números no son compatibles con .dup?
- 10. Xattrs no son compatibles
- 11. ¿Por qué las cualificaciones de alcance redundante son compatibles con el compilador y es legal?
- 12. ¿Sobrecarga de usar estructuras como envoltorios para primitivas para verificación de tipos?
- 13. ¿Qué navegadores son compatibles con document.activeElement?
- 14. ¿Qué navegadores son compatibles con "! Important"?
- 15. ¿Por qué tenemos cierres en JavaScript?
- 16. ¿Qué navegadores solo son compatibles con SSLv2?
- 17. ¿Por qué Android prefiere las clases estáticas
- 18. ¿Las expresiones lambda son compatibles con Razor?
- 19. ¿Las enumeraciones son compatibles con JDBC?
- 20. ¿Por qué las propiedades automáticas de C# no son compatibles con valores predeterminados como VB 2010?
- 21. ¿Por qué tenemos punteros distintos de vacío?
- 22. ¿Qué navegadores web son compatibles con Array.forEach()
- 23. ¿Qué navegadores son compatibles con HTML SHORTTAGs?
- 24. ¿Qué navegadores son compatibles con XSLT 2.0?
- 25. ¿Por qué las interfaces no son [Serializable]?
- 26. ¿Por qué las funciones anidadas no son compatibles con el estándar C?
- 27. ¿Qué caracteres son ampliamente compatibles con los nombres de clases de CSS?
- 28. ¿Por qué tenemos que ir a JQuery?
- 29. ¿Por qué tenemos objetos invocables en python?
- 30. Comparar cadenas por envoltorios SSE4
¿hay alguna otra razón que almacenamiento? – GuruKulki
No estoy 100% seguro de cómo funcionan las partes internas aquí, pero creo que para calcular cualquier cosa con los números, la maquinaria primero tiene que extraer los valores de las envolturas (unboxing), lo que requiere al menos algo de trabajo. Pero la optimización del tiempo de ejecución JIT probablemente está jugando sus propios trucos aquí, por lo que la diferencia puede ser bastante insignificante en la práctica, incluso en programas numéricamente intensivos. Esto debe medirse para estar seguro. –