伪代码表示instanceof

如果用伪代码描述:

1

2

3

4

5

6

7

8

9

10

11

boolean result;

if (obj == null) {

  result = false;

else {

  try {

      T temp = (T) obj; // checkcast

      result = true;

  catch (ClassCastException e) {

      result = false;

  }

}

  也就是说有表达式 obj instanceof T,instanceof 运算符的 obj 操作数的类型必须是引用类型或空类型; 否则,会发生编译时错误。 

  如果 obj 强制转换为 T 时发生编译错误,则关系表达式的 instanceof 同样会产生编译时错误。 在这种情况下,表达式实例的结果永远为false。

  在运行时,如果 T 的值不为null,并且 obj 可以转换为 T 而不引发ClassCastException,则instanceof运算符的结果为true。 否则结果是错误的

  简单来说就是:如果 obj 不为 null 并且 (T) obj 不抛 ClassCastException 异常则该表达式值为 true ,否则值为 false 。

  所以对于上面提出的问题就很好理解了,为什么 p1 instanceof String 编译报错,因为(String)p1 是不能通过编译的,而 (List)p1 可以通过编译。

猜你喜欢

转载自blog.csdn.net/caihongmeimeis/article/details/110881192
今日推荐