Tengo las siguientes dos variables de objeto
Date a;
Date b=null;
Definitivamente tanto 'a' como 'b' no se refieren a ningún objeto.
Ahora si invoco la siguiente declaración
System.out.println(a.toString());
Habrá un error de tiempo de compilación, mientras que si invoco la siguiente declaración
System.out.println(b.toString());
No habrá error de tiempo de compilación pero habrá un error de tiempo de ejecución. ¿Cuál es la razón de esto y qué valor se almacenará realmente en 'b' para representar un valor nulo?
Respuestas:
Eso es porque el estado de las variables locales está controlado dentro de su alcance
Que no es el caso para los campos
Ahora, ¿por qué está bien establecer una variable en nula y usarla de inmediato? tal vez es un error histórico que a veces conduce a errores horribles
¿Cuál es la diferencia semántica?
solo declara una variable que puede contener una referencia que apunta a un objeto de tipo
Date
, sin embargohace exactamente lo mismo, pero la referencia apunta a nulo esta vez, nulo es como cualquier referencia, ocupa un espacio de un puntero nativo, es decir, 4 bytes en máquinas de 32 bits y 8 bytes en máquinas de 64 bits
fuente
No hay diferencia para los campos de clase. Son
null
por defecto para objetos, 0 para valores numéricos yfalse
para booleanos.Para variables declaradas en métodos, Java requiere que se inicialicen. No inicializarlos causa un error de tiempo de compilación cuando se accede a ellos.
¿Cual es la razón? Los campos de clase se pueden modificar por cualquier método. En cualquier orden se invoca el método. Todos los campos no privados pueden ser modificados por otras clases y / o clases que extiendan esa clase. Por lo tanto, no tiene sentido notificar acerca de una variable no inicializada, ya que puede asignarse en muchos, muchos lugares.
Sin embargo, las variables dentro de los métodos son locales y solo se pueden modificar dentro del método. Por lo tanto, es posible y racional señalar posibles errores. Y el compilador intenta hacerlo. Si sabe que el campo no está inicializado, mostrará un error, porque eso nunca es lo que desea. Si no está seguro, emitirá una advertencia para que pueda asegurarse.
fuente