primitivos - tipos de variables en java ejemplos
Por qué Java no permite nulos al declarar tipos de datos primitivos (7)
Esta pregunta ya tiene una respuesta aquí:
Esta es una continuación de mi pregunta anterior y la de las respuestas a esta pregunta Declaración de clases de envoltura
Java ajusta el tipo de datos primitivo a las clases de envoltorio, entonces ¿por qué?
char c = null; // invalid
int i = null; // invalid
no está permitido pero
Character cObj = null; // valid
Integer iObj = null; // valid
esta permitido.
Los valores de referencia (a menudo solo referencias) son punteros a estos objetos, y una referencia nula especial, que se refiere a ningún objeto.
Según jls-4.3.1 , no tiene sentido tomar sobre la referencia null
sin la existencia de un objeto.
Junto con la respuesta anterior, me gustaría agregar este punto también.
Para los tipos primitivos, tenemos un tamaño de memoria fijo, es decir, para int tenemos 4 bytes y char tenemos 2 bytes. Y nulo se usa solo para objetos porque el tamaño de la memoria no es fijo.
Así que por defecto tenemos,
int a=0;
y no
int a=null;
Lo mismo con otros tipos primitivos y, por lo tanto, nulo solo se usa para objetos y no para tipos primitivos.
Las variables de tipo primitivo de Java son de almacén por valor en lugar de variables de almacén por referencia. Donde las clases de contenedor son objetos básicamente como cualquier otro objeto Java, excepto que todo lo que hacen es envolver un tipo primitivo.
Los objetos como Carácter y Entero son punteros: el número real almacenado en los bytes que son el valor de esa variable representa una dirección en la memoria para el resto de la memoria de la JVM. Por lo tanto, es posible y significativo establecer ese número en una dirección que no va a ninguna parte, que es lo que es nulo.
Una primitiva como int o char, sin embargo, tiene un número que se interpreta como un número (entero o código ASCII), y no hay forma de hacerlo "no un número" porque todo lo que la memoria puede almacenar es números.
Porque las primitivas representan valores y las variables de objetos representan referencias (algo así como punteros) a objetos de datos complejos. No hay un valor nulo general, es una palabra clave especial que "hace referencia a nada" o una referencia vacía . Esta es una respuesta altamente poco profesional, pero creo que será la más apropiada.
Además, ¿qué podría ser en su opinión, el valor numérico de nulo? 0? -1? Pero, esos son enteros válidos, ¿y qué más?
Le sugiero encarecidamente que comience a familiarizarse con el siguiente tutorial complejo de Java. Todos los aspectos que ha estado preguntando se explican allí y se respaldan con ejemplos.
Refiriéndose a unboxing / autoboxing, debes imaginar que son dos formas que el compilador adopta para evitar que te vuelvas loco con la "conversión" continua de primitivo a objeto y viceversa, pero no son perfectos.
¿Qué sucede si tu envoltura Integer es nula y haces una división? ¡No una división por 0 sino una excepción de puntero nulo, porque java no puede desempaquetar un objeto no referenciado!
Por lo tanto, es seguro y lógico mantener diferentes reglas de inicio para primitivos y objetos.
null
significa "falta de un objeto". Las referencias pueden carecer de un objeto, las primitivas no pueden.