En jshell-11, ¿por qué una variable de referencia redeclarada que se restablece como nula todavía tiene un tipo?
Al volver a declarar Integer 'a' en la línea 33, ¿por qué jshell muestra la variable de referencia como una instancia de Integer (consulte las líneas 38 y 39)? Después de la redeclaración, la línea 34 muestra que 'a' se establece en nulo. Cuando 'a' se declara en la línea 6 pero no se le da un valor, o se restablece a nulo en la línea 22, 'a' no se considera una instancia de Integer. Esperaría que cuando la variable de referencia se vuelva a declarar, dado que su valor es nulo, no sea una instancia de un tipo; Sin embargo, este no es el caso
01: java-lava:~ cafedude$ jshell
02: | Welcome to JShell -- Version 11
03: | For an introduction type: /help intro
04:
05: jshell> Integer a;
06: a ==> null
07: | created variable a : Integer
08:
09: jshell> a instanceof Integer;
10: $2 ==> false
11: | created scratch variable $2 : boolean
12:
13: jshell> a = 1;
14: a ==> 1
15: | assigned to a : Integer
16:
17: jshell> a instanceof Integer;
18: $4 ==> true
19: | created scratch variable $4 : boolean
20:
21: jshell> a = null;
22: a ==> null
23: | assigned to a : Integer
24:
25: jshell> a instanceof Integer;
26: $6 ==> false
27: | created scratch variable $6 : boolean
28:
29: jshell> a = 1;
30: a ==> 1
31: | assigned to a : Integer
32:
33: jshell> Integer a;
34: a ==> null
35: | modified variable a : Integer
36: | update overwrote variable a : Integer
37:
38: jshell> a instanceof Integer;
39: $9 ==> true
40: | created scratch variable $9 : boolean