2010-01-20 13 views
8

¿Por qué hay un tipo primitivo para entero (int) aunque tenemos un objeto para entero como entero? Pero lo mismo no es con el tipo de cadena. No existe ese tipo primitivo para String. ¿Siempre String trata con la referencia del objeto?Entero como tipo primitivo

Respuesta

18

Velocidad. Es mucho más rápido para el código de máquina agregar dos int usando instrucciones de CPU nativas, en lugar de tener que tomar dos objetos de enteros, extraer los valores int de ellos, luego agregarlos, creando un nuevo objeto entero de resultados para contener el resultado. (how JNI maps primitives)

Las cadenas son complejas, tienen muchos métodos y, como tales, no tienen contrapunto de código de máquina. Ellos son promovidos a un verdadero Objeto. Además, un estado de Cadena comparte con otras Cadenas creadas con el mismo valor. Ningún valor primitivo comparte estado con otros valores primitivos como este. (immutable can be shared | primitive no sharing)

+1

También agregaría espacio. Menos espacio para almacenar un entero en la memoria, que un objeto completo con todas sus operaciones. – Alex

0

Un tipo de datos de cadena es considerablemente más complejo que un int - hay una cantidad variable de memoria para contener una cadena por una cosa.

1

Esto se debe a que los procesadores (CPU) tienen soporte directo para tipos enteros pero no para cadenas. Y por razones de rendimiento, Java admite algunos tipos nativos que es probable que sean compatibles con los procesadores en los que se puede ejecutar la JVM.

0

En última instancia, los cálculos se realizan en el lenguaje a nivel de máquina. Me pregunto qué hace la diferencia entre primitivos y objetos en términos de rendimiento. La respuesta elaborada será apreciada.

+0

esto debería ser un comentario, no una 'respuesta' compita por favor el recorrido SO aquí: http://stackoverflow.com/tour –

Cuestiones relacionadas