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 работает?
Я думаю, что можно переписать 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
.
Экземпляр проверит тип объекта под проверкой.
У вас первые два будут иметь нулевое значение, для которого он возвращает false. и 3-й у нас есть длинный объект, который возвращает True.
Вы можете получить больше информации о INSTACEOF на этом сайте Java Glossary: http://mindprod.com/jgloss/instanceof.html
Это не имеет никакого отношения к экземпляру
. Метод Long.getLong()
не разбирает строку, а возвращает содержимое системного свойства с таким именем, интерпретируемого как long. Так как отсутствует системное свойство с именем 23, то возвращается ноль. Хотите, чтобы Long.parseLong()
Long.getLong(...)
возвращало значение свойства long системы. В вашем случае возвращается null
, так как отсутствует свойство системы с именем "23". Так:
null
, а instanceof
возвращает false
при сравнении нулейjava.lang.Long
(можно проверить, выведя l3. getClass()
), поэтому true
ожидается Вместо того, чтобы использовать Long.getLong(...)
, используйте Long.parseLong(...)
для разбора String
.
l1 instanceof
, поскольку l1
равен null , instanceof дает false (как указано в спецификациях языка Java)
l2 instanceof Long
это дает false , поскольку вы используете неправильный метод getLong
:
Определяет длинное значение системного свойства с указанным именем.