вопрос о работе instanceof - PullRequest
       13

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

5 голосов
/ 28 января 2010
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

Я не мог понять возвращаемый результат. Я ожидал истинного по крайней мере для второго и третьего сисо. Может кто-нибудь объяснить, как работает instanceof?

Ответы [ 6 ]

15 голосов
/ 28 января 2010

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

11 голосов
/ 28 января 2010

l1 instanceof Long

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

l2 instanceof Long

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

Determines the long value of the system property with the specified name.

7 голосов
/ 28 января 2010

Long.getLong(..) возвращает длинное значение системного свойства. В вашем случае возвращается null, потому что нет системного свойства с именем «23». Итак:

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

Вместо использования Long.getLong(..) используйте Long.parseLong(..) для анализа String.

1 голос
/ 28 января 2010

Полагаю, можно переписать 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 ничем.

0 голосов
/ 28 февраля 2019

Long l1 = null; // false по умолчанию null - false для instanceof

Long l2 = Long.getLong ("23"); // истина, если "23" присутствует в свойстве systeme с длинным значением, иначе ложь

Long l3 = Long.valueOf (23); // истина, потому что 23 является экземпляром Long

0 голосов
/ 28 января 2010

экземпляр проверит тип проверяемого объекта.

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

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

...