2010-10-23 102 views
16

Tengo curiosidad. ¿Por qué tengo que escribir String myStr con una letra mayúscula mientras que escribo int aNumba con una letra minúscula?¿Por qué el tipo Java "String" está escrito en mayúscula mientras que "int" no?

+1

Parece ser un empate entre Peter y Bermuda, con ankou llegando tercero. Que carrera damas y caballeros. –

+1

es porque Java no es un verdadero lenguaje OO pero (afortunadamente) un lenguaje híbrido que permite el uso de primitivas, que son lo suficientemente cercanas al metal (no muy diferente de C). Gracias a que Java es híbrido, podemos usar elementos como TIntIntHashMap de Trove que tienen un excelente rendimiento, a diferencia del API HashMap de API predeterminado {Integer, Integer} que es ** realmente ** muy cojo. – SyntaxT3rr0r

+0

@Webinator No estoy de acuerdo. Compare el soporte primitivo limitado de Java con el soporte de tipo de valor universal de C# (se conceden advertencias y las personas sobreutilizan struct 'para rendimiento', pero se usa para representar uniformemente todos los tipos primitivos, es extensible y permite métodos [sin polimorfismo o extendiendo - pero permite métodos de extensión] a los tipos de valor definidos). O bien, considere Scala, que no expone directamente ningún tipo primitivo/valor (pero se compilará hasta las primitivas JVM según corresponda). "Necesitar TIntIntHashMap para el rendimiento" solo muestra qué tan débil es Java aquí. –

Respuesta

41

Porque int es un tipo primitivo, no una clase, por lo tanto no es directamente comparable con String. El tipo de clase correspondiente es Integer, deletreado según la clase naming conventions.

pares similares de tipos primitivos y de clase son

+1

¿Hay razones para usar una clase x sobre su primitiva correspondiente? – Tower

+3

@rFactor Sí. Imagina que quieres una lista de int. No se puede hacer con la API Java estándar, ya que las primitivas no son subtipos de Object y, por lo tanto, no son aptas para genéricos, pero puede obtener ArrayList . Java (1.5+?) Hace algunos autoboxing para que sea más fácil de usar. –

+3

Creo que también es necesario tener en cuenta que es fácil confundir String con un tipo primitivo, ya que en realidad es una clase MAGIC. Esto le da algunas propiedades (como tener literales) que de otro modo solo tienen los tipos primitivos. – Jasper

2

int es un tipo de datos primitivo, String deriva de Object y es una clase.

0

porque int es un tipo primitivo mientras cadena es un tipo de objeto

1

Debido String es una clase (es decir, un objeto) y int no es

ver Java naming conventions para más informaciones sobre.

0

Por convención, los objetos Java han capitalizado nombres de primera letra (por ejemplo String), mientras que las primitivas tienen nombres en minúscula (por ejemplo, int, float, double, etc.)

0

tipos básicos de bajo nivel como byte o integer se nombran en minúsculas, y los objetos/clases de alto nivel se denominan mayúsculas (CamelCase). Así es como se diseñó Java.

3

Me uniré a la fiesta también: Todo es una convención.

Y gracias a la bondad:.

class billybobstype { 
    ... 
} 

(Es todo convención No hay ninguna razón por la "Cadena" no podría haber sido "cadena", sin embargo, "int" es una palabra clave y algo más que un nombre de clase - de los cuales CamelCase es la convención pero no es un requisito - por lo que requeriría una modificación del compilador :-)

Editar: Como acotación al margen, C# tiene t La palabra clave 'string' (parte de la gramática del lenguaje) que es un alias para la clase 'System.String'. (C# también implementa 'int', 'long', etc.como alias de esta manera, pero puede hacerlo porque tiene un sistema de "tipo de valor" extensible mientras que la JVM solo considera/permite -para un pequeño conjunto discreto de "tipos de valor").

0

Es solo algo original Los diseñadores de Java nos impusieron :-)

7

La cadena en sí es una clase derivada de Object, mientras que int es una primitiva.

Su confusión probablemente proviene del hecho de que String se comporta de muchas maneras como una primitiva, de modo que tiene operaciones básicas que se pueden aplicar a ella, como la concatenación (+), y que no necesita ser importado.

La concatenación se debe a que es lo suficientemente fundamental como para aplicar esta operación adicional, aunque sea un tipo de objeto.

La razón por la que no necesita importarse, es por defecto que se importa el paquete java.lang, del cual String es miembro.

+1

Y dicen que Java "es fácil" ;-) –

+2

para ser justos con Java, si tuviera que importar java.lang.Cadena o tenía que hacer concatenación como nueva Cadena ("myString"), append ("concat"), append ("concat"), hubiera sido mucho más tedioso. Y al convertirlo en un objeto, abre la capacidad de realizar llamadas a métodos, como charAt, indexOf, etc., cosas que damos por sentado, pero que probablemente no podrían pasar. Tengo que aceptar que los desarrolladores de Java obtuvieron este correcto. – Codemwnci

-1

¡No puedo creer algunas de las respuestas a esta pregunta! La respuesta no pertenece a la convención, y si crees que esa es la respuesta, necesitas estudiar un poco más. int es un tipo primitivo mientras que String es una clase (ver la respuesta de Peter).

Una advertencia importante de la primitiva frente complejo está autoboxing:

http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

Aquí está el tutorial de Java para las primitivas:

http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

La clase String es un caso especial, así:

http://www.javabeginner.com/learn-java/java-string-class

¡Lectura de personas!

+1

Nadie dice nada para contradecir que int es primitivo y String no lo es. Sin embargo, la capitalización, que es el tema de esta pregunta, se debe a una convención. Ciertamente es legal crear una clase llamada 'cadena' en Java, pero la convención es que los nombres de las clases tienen el título en mayúscula y las primitivas no. – Yuliy

+0

El punto, y por qué los comentarios de ti y de los demás no son válidos, se debe a que int no es una clase, por lo que estás comparando manzanas con naranjas (por lo tanto, primitivas vs. clases). La convención de capitalización SOLO SE APLICA A LAS CLASES, no a las primitivas, por lo tanto, es un punto discutible que no se aplica. – hisdrewness

Cuestiones relacionadas