String中的equals源码的一点疑问。

为什么instanceof跨类后就不报编译错误了呢?
1100d7bc9a0bf1bcef6460b2e1c9876.png8231a7e131aea4dafff0eecd65b6743.png

阅读 1.7k
2 个回答

anObject 是 Integer 对象的时候,anObject instanceof String 得到 false,不会报错。
然后跳过 if 分支,直接 return false

instanceof 用来动态判断类型是否匹配,返回 truefalse,不会抛异常。

1、A instanceof B,用于判断A是否是B类型的实例。其中A、B之间必须是有继承或实现关系。Integer与String不满足条件,所以报错。
2、任何类型都是Object类型的子类,因此Object的引用可以指向任何实例。由于继承/实现是运行时多态,在编译期没法告诉你Object所引用的实例是否是String类型的实例,因此编译期不报错。
3、运行时,instanceof会根据实际类型进行判断,返回true或false。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题