2012-06-15 19 views

Respuesta

41

Un tipo primitivo es solo información. Lo que llamamos objetos, por otro lado, son solo indicadores de dónde se almacenan los datos. Por ejemplo:

Integer object = new Integer(3); 
int number = 3; 

En este caso, object es sólo un puntero a un objeto entero cuyo valor pasa a ser 3. Es decir, en la posición de memoria donde se almacena el objeto variable, todo lo que tienes es una referencia a donde realmente están los datos La posición de memoria donde se almacena number, por otro lado, contiene el valor 3 directamente.

Por lo tanto, podría establecer el object como nulo, pero eso solo significaría que los datos de ese objeto están en nulo (es decir, no están asignados). No puede establecer un int a nulo, porque el lenguaje lo interpretaría como el valor 0.

Espero que ayude!

+0

Supongo que estas mejores prácticas siguen siendo ciertas incluso si Java 8 introdujo primitivas opcionales como OptionalInt? OptionalInt.empty() podría usarse en lugar de un valor nulo. Pero mi entendimiento es que los Opcionales deberían ser tipos de métodos de devolución, y no ser tipos para las propiedades mismas. – tmn

5

Porque eso es lo que dice el estándar de lenguaje.

Si desea poder pasar null, debe usar the wrapper types, p. Ej. Integer en lugar de int.

3

Porque es un tipo primitivo y no un objeto. Puede usar el objeto correspondiente para cada tipo si necesita la capacidad de usar valores nulos (es decir, doble para doble, larga para larga, booleana para booleana, etc.)

8

Porque los tipos de datos primitivos en Java no son Object s . Siempre puede usar una de las clases contenedoras para tener un Object. Cada uno de los ocho tipos de datos primitivos tiene su correspondiente envoltorio:

  • bytes: java.lang.Byte
  • corta: java.lang.Short
  • int: java.lang.Integer
  • larga: java.lang.Long
  • float: java.lang.Float
  • doble: java.lang.Double
  • booleano: java.lang.Boolean
  • carbón java.lang.Character

Si usted está interesado en toda la estructura, puede empezar a here (Primitive Data Types).

13

Porque null es una referencia. Y los tipos primitivos no son tipos de referencia. Solo los objetos son tipos de referencia.

1

El lenguaje de programación Java tiene tipado estático, lo que significa que todas las variables deben declararse antes de que puedan ser utilizadas. Esto implica indicar el tipo y nombre de la variable.

1

Junto con todas las respuestas anteriores, me gustaría añadir este punto también.

Para tipos primitivos, hemos solucionado el tamaño de la memoria, es decir, para int tenemos 4 bytes y char tenemos 2 bytes. Y null se usa solo para objetos porque el tamaño de la memoria no es fijo.

lo que por defecto que tenemos,

int a=0; 

y no

int a=null; 

mismo con otros tipos primitivos y, por tanto, nula sólo se utiliza para los objetos y no para los tipos primitivos.

2

Los objetos implican más sobrecarga que primitivos. La siguiente prueba muestra que int se realiza aproximadamente 10 veces más rápido que Integer.

int n; 
EtmPoint point1 = etmMonitor.createPoint("test:objects"); 
for (n = 0; n < 1000000; n++) { 
    Integer t = 0; 
    t = 10; 
    t = 11; 
} 

point1.collect(); 
EtmPoint point = etmMonitor.createPoint("test:primitives"); 
for (n = 0; n < 1000000; n++) { 
    int t = 0; 
    t = 10; 
    t = 11; 
} 
point.collect(); 

etmMonitor.render(new SimpleTextRenderer()); 

Esta es la razón por .NET implementadas primitivas anulables, por desgracia java no tiene primitivas anulables.

+0

Y esta es exactamente la razón de la pregunta. .NET lo implementó hace siglos, y Java está atrasado en este aspecto, desafortunadamente. – Shane

1

En primer lugar, la diferencia de Primitive y Object Reference es la variable Primitive store the real values, mientras que la variable de referencia object almacena la dirección del objeto al que se refieren, en este caso en referencia de objeto si no hay dirección pasará a "nulo".

Los valores predeterminados del tipo de datos primitivos dependen del tipo de datos primitivos: como byte = 0, short = 0, int = 0, largo = 0L, float = 0.0f, double = 0.0d, boolean = false, char = "\ u0000".

Cuando declaramos una variable de cualquier tipo de clase, se conoce como tipo de datos de referencia.

EX:

t1 Prueba

t2 Test (Tipos Wrapper Object)

entero i

largo l

valores predeterminados referencia de objeto, Jvm inicializa variable de referencia como "nula" y lo hará también inicializar el conjunto a "nulo"

Cuestiones relacionadas