Почему в jshell-11 переопределенная ссылочная переменная, которая сбрасывается в null, все еще имеет тип?
При повторном указании целочисленного значения "a" в строке 33, почему jshell отображает ссылочную переменную как экземпляр Integer (см. Строки 38 и 39)? После переопределения строка 34 показывает, что "а" имеет значение "ноль". Когда в строке 6 объявляется "а", но в строке 22 ему не дано значение, или в строке 22 значение "ноль", "а" не считается экземпляром целого числа Я ожидаю, что, когда ссылочная переменная будет объявлена повторно, поскольку ее значение равно нулю, она не будет экземпляром типа; Однако это не так.
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
2 ответа
Проблема в том, что, хотя он говорит, что он установлен в ноль, на самом деле это не так. Смотрите добавленные комментарии в ошибке для более подробной информации.
Я изменил название ошибки на: JShell: Переопределенная переменная должна быть сброшена
Я попытаюсь исправить в JDK 12.
Вторая проблема не является ошибкой, Java не допускает операторов instanceof, которые не могут быть истинными - поведение точно соответствует javac.
Я поднял это как ошибку, и это было принято.
https://bugs.openjdk.java.net/browse/JDK-8211694
Хорошее место