вопрос на работе instanceof

Long l1 = null;
Long l2 = Long.getLong("23");
Long l3 = Long.valueOf(23);

System.out.println(l1 instanceof Long);  // returns false
System.out.println(l2 instanceof Long);  // returns false
System.out.println(l3 instanceof Long);  // returns true

Я не мог понять возвращенный вывод. Я ожидал верный по крайней мере для 2-го и 3-го syso's. Кто-то может объяснить, как instanceof работает?

5
задан Michael Borgwardt 28 January 2010 в 11:03
поделиться

5 ответов

Я думаю, что можно переписать SOP как:

System.out.println(l1 != null && l1 instanceof Long);
System.out.println(l2 != null && l2 instanceof Long);
System.out.println(l3 != null && l3 instanceof Long);

как всегда NULL , не может быть никакой instanceOf .

1
ответ дан 18 December 2019 в 05:31
поделиться

Экземпляр проверит тип объекта под проверкой.

У вас первые два будут иметь нулевое значение, для которого он возвращает false. и 3-й у нас есть длинный объект, который возвращает True.

Вы можете получить больше информации о INSTACEOF на этом сайте Java Glossary: ​​ http://mindprod.com/jgloss/instanceof.html

0
ответ дан 18 December 2019 в 05:31
поделиться

Это не имеет никакого отношения к экземпляру . Метод Long.getLong() не разбирает строку, а возвращает содержимое системного свойства с таким именем, интерпретируемого как long. Так как отсутствует системное свойство с именем 23, то возвращается ноль. Хотите, чтобы Long.parseLong()

15
ответ дан 18 December 2019 в 05:31
поделиться

Long.getLong(...) возвращало значение свойства long системы. В вашем случае возвращается null, так как отсутствует свойство системы с именем "23". Так:

  • 1 и 2 являются null, а instanceof возвращает false при сравнении нулей
  • 3 является java.lang.Long (можно проверить, выведя l3. getClass()), поэтому true ожидается

Вместо того, чтобы использовать Long.getLong(...), используйте Long.parseLong(...) для разбора String.

7
ответ дан 18 December 2019 в 05:31
поделиться

l1 instanceof

, поскольку l1 равен null , instanceof дает false (как указано в спецификациях языка Java)

l2 instanceof Long

это дает false , поскольку вы используете неправильный метод getLong :

Определяет длинное значение системного свойства с указанным именем.

11
ответ дан 18 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: