2010-01-20 18 views
31

¿Por qué Java no tiene un tipo primitivo para Cadena cuando la mayoría de los otros tipos de datos lo hacen?¿Por qué no hay ningún tipo primitivo para Cadena?

+5

Ugh. Desearía que no hubiera primitivos para ser honesto contigo. – CookieOfFortune

+0

Básicamente es la misma pregunta que hizo aquí: http://stackoverflow.com/questions/2099171/integer-as-primitve-type – David

+0

¿De verdad quiso decir, por qué no hay un objeto de "valor-tipo" para la cadena en lugar del tipo primitivo? ? (es decir, ¿cómo se pone una cadena en la pila frente al montón?) – BrainSlugs83

Respuesta

48

Cadena es un objeto, no es un tipo primitivo en absoluto, solo una matriz de caracteres. La razón por la cual existen tipos primitivos en Java en absoluto es interesante, extracto de a James Gosling interview:

Bill Venners: ¿Por qué hay primitiva tipos en Java? ¿Por qué no era todo solo un objeto?

James Gosling: Totally a efficiency thing. Hay todo tipo de personas que han construido sistemas donde ints y que son todos objetos. Hay una variedad de maneras de hacer eso, y todos tienen algunos problemas bastante graves . Algunos de ellos son lentos, porque asignan memoria para todo. Algunos de ellos intentan hacer objetos donde a veces son objetos , a veces no son (lo que es lo que hizo el sistema LISP estándar), y entonces las cosas se ponen realmente raras. Es tipo de obras, pero es extraño.

Simplemente haciendo que haya objetos primitivos y, y simplemente son diferentes. Resuelves muchos problemas

En resumen, los tipos primitivos existen por razones de eficiencia.

+26

+1 - Y el corolario es que String no es primitivo porque hacerlo primitivo no lo haría más eficiente. –

+1

¡Una muy buena razón para tener tipos primitivos! Seguro que ahorra tiempo para hacer una int que perder unos preciosos segundos (aproximadamente 10) creando una instancia 'Integer foo = new Integer (aValueFoo);'. Sería complicado ver 'Integer foo Integer foo Integer foo Integer foo ...' alineando su código en mi opinión. Integer tiene sus usos cuando se trata de cosas más grandes que hacer con enteros ... ¡los primitivos son una bendición! –

5

La mayoría de los lenguajes de programación no consideran una cadena primitiva porque en realidad es una matriz de caracteres. Los tipos primitivos casi siempre tienen un tamaño fijo.

Debo decir que algunas personas podrían considerar que String es "primitivo" porque está incorporado. Pero no es primitivo en el sentido de ser un tipo básico en comparación con un tipo compuesto. Como una cadena es una matriz de caracteres, es un tipo compuesto.

+0

¿Algún idioma lo considera un primitivo? ¿Una longitud fija en la memoria hará que sea uno? – Jeff

+0

Por extraño que parezca, en Javascript la cadena es primitiva. Puede tener una longitud de memoria fija ya que es inmutable. –

13

int, char, float, double, etc. Todos tienen una longitud fija en la memoria. p.ej. un int tiene 4 bytes, por lo tanto, 32 bits.

pero una cadena puede tener una longitud diferente, en realidad es una matriz de caracteres.

+1

Bueno, eso es más que una razón para decir por qué debería ser un tipo de objeto (es decir, una clase) y no un tipo de valor (es decir, una estructura): la pregunta es, ¿por qué no es una primitiva? - En Java, ¿están todos los tipos de valores primitivos? - ¿No hay estructuras en Java? – BrainSlugs83

+1

La ÚNICA respuesta lógica a una pregunta directa: debido a problemas de asignación de memoria. un tipo int o un tipo float requiere un tamaño de memoria específico, pero una cadena (lo sentimos, String) tiene una longitud variable formada por una longitud de memoria indeterminada (en tiempo de declaración). Período. Muchas gracias! – user3285866

Cuestiones relacionadas