关于instanceof工作的问题

时间:2010-01-28 11:01:19

标签: java 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

我无法理解返回的输出。我期待第二和第三个系统的真正至少。有人能解释一下instanceof的工作原理吗?

6 个答案:

答案 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”的系统属性。所以:

  • 1和2为nullinstanceof在比较空值时返回false
  • 3为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