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的工作原理吗?
答案 0 :(得分:15)
这与instanceof
无关。方法Long.getLong()
不解析字符串,它返回具有该名称的系统属性的内容,解释为long。由于没有名称为23的系统属性,因此返回null。你想要Long.parseLong()
答案 1 :(得分:11)
l1 instanceof Long
由于l1
null , instanceof 会产生 false (由Java languange规范指定)
l2 instanceof Long
这会产生 false ,因为您使用了错误的方法getLong
:
Determines the long value of the system property with the specified name.
答案 2 :(得分:7)
Long.getLong(..)
返回系统属性的long值。它会在您的情况下返回null
,因为没有名为“23”的系统属性。所以:
null
,instanceof
在比较空值时返回false
java.lang.Long
(您可以输出l3.getClass()
进行检查),因此预计会出现true
不使用Long.getLong(..)
,而是使用Long.parseLong(..)
来解析String
。
答案 3 :(得分:1)
我想有人可以将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
任何内容。
答案 4 :(得分:0)
将检查被检查对象类型的实例。
在你的前两个将具有null值,它返回false。第三个具有返回true的Long对象。
您可以在此java词汇表网站上获取有关instaceof的更多信息:http://mindprod.com/jgloss/instanceof.html
答案 5 :(得分:0)
长l1 =空; //默认情况下为false,对于instanceof,则为false
Long l2 = Long.getLong(“ 23”); //如果在systeme属性中存在“ 23”且值为long值,则为true,否则为false
Long l3 = Long.valueOf(23); // true,因为23是Long的instance