2012-06-16 10 views
5

Duplicar posible:
Why can Integer and int be used interchangably?¿Por qué java tiene un tipo de datos Integer int e int y puedo mover datos de uno a otro?

estoy tratando de entender la diferencia entre estos. ¿Puedo declarar que algo es una int por ejemplo y luego comparar esto con un número que coloque en un entero? Además, ¿por qué Java tiene los dos? ¿Por qué no combinar esto?

¿Alguien me puede ayudar mostrándome un código de 3-4 ejemplo de cómo se usa cada uno?

+1

¿Se refiere a la clase de enteros? – taskinoor

+0

¡Exactamente, java tiene un tipo primitivo int, y una clase "Integer"! La clase tiene rutinas, etc. ... ¡el tipo primitivo es solo eso, primitivo! – trumpetlicks

+0

Los tipos primitivos son más rápidos, pero no actúan como objetos de clase. –

Respuesta

5

int primitiva no es un objeto. Las matrices permiten primiteves:

int[] array = new int[10]; 

pero no lo hacen los genéricos:

List<int> //won't compile 

Esta es la razón principal de usar estas clases contenedoras días. También puede usar Integer donde se espera Object. Finalmente Integer puede tener null valor si desea implementar opcionalidad.

Tenga en cuenta que hay algunos idiomas que tratan esta incoherencia. En usted tiene los tipos de valor, en Intclase se extienden desde AnyVal clase mientras que los objetos normales se extienden AnyRef (ambos éstos se extienden desde Any).

1

int es una primitiva, entero es una clase. No puede decir ArrayList<int> pero puede decir ArrayList<Integer>.

2

Ver boxing de tipos en Java. Se habla de hacerlos exactamente iguales comenzando con Java 9.

1

Todos los tipos primitivos en Java tienen sus contrapartes de clase (clases descendientes de Object), por ejemplo Boolean, Long etc. Se llama "boxeo". Explicación, ver, por ejemplo, here.

2
  • Primitive int tipo y Integer clase son diferentes tipos. No puede comparar directamente una primitiva int con un objeto Integer. Debe obtener intValue del objeto Integer.
  • Sí, esta es una función requerida. Java y algunos otros lenguajes tienen este tipo de envoltorios de objetos para tipos primitivos para manejar las situaciones donde se requiere un objeto. Por ejemplo, una clase de colección esperará objetos, no puede usar la primitiva int con ellos. Por lo tanto, necesitará un contenedor Integer.
2

Entero es un objeto, mientras que int es un tipo primitivo. Fundamentalmente, los objetos se pasan por referencia, mientras que los primitivos se pasan por valor. También difieren en dónde se asignan.

En términos de Java, un objeto tiene funciones.Llamar a algo como:

Integer.toString() 

está bien, pero:

int.toString() 

no lo es.

+0

Todo en Java se pasa por valor. Tanto primitivos como objetos por igual. Java pasa a almacenar objetos internamente como punteros, por lo que el valor de un objeto es un puntero. De hecho, la especificación del lenguaje java especifica que todos los parámetros del método pasan por valor. Sin embargo, las personas a menudo lo confunden con pasar por referencia porque puede llamar a un método que cambia los campos y la persona que llama lo ve. Esto no tiene nada que ver con pasar por referencia. – Matt

Cuestiones relacionadas