《Java编程思想》学习笔记14.5 instanceof与Class的等价性

《Java编程思想》学习笔记14.5 instanceof与Class的等价性,第1张

《Java编程思想》学习笔记14.5 instanceof与Class的等价性

在查询类型信息时,以instanceof的形式(即以instanceof的形式,它们产生相同的结果)与直接比较Class对象有一个很重要的差别。下面的例子展示了这种差别:
//: typeinfo/FamilyVsExactType.java
// The difference between instanceof and class
package typeinfo;
import static net.mindview.util.Print.*;

class base {}
class Derived extends base {}

public class FamilyVsExactType {
static void test(Object x) {
print(“Testing x of type” + x.getClass());
print(“x instanceof base” + (x instanceof base));
print(“base.isInstance(x)” + base.class.isInstance(x));
print(“Derived.isInstance(x)” + Derived.class.isInstance(x));
print(“x.getClass() == base.class” + (x.getClass() == base.class));
print(“x.getClass() == Derived.class” + (x.getClass() == Derived.class));
print(“x.getClass().equals(base.class))” + (x.getClass().equals(base.class)));
}
public static void main(String[] args) {
test(new base());
test(new Derived());
}
}//:~
test()方法使用了两种形式的instanceof作为参数来执行类型检查。然后获取Class引用,并用和equals()来检查Class对象是否相等。使人放心的是,instanceof和isInstance()生成的结果完全一样,equals()和也是一样。但是这两组测试得出的结论却不相同。instanceof保持了类型的概念,它指的是“你是这个类吗,或者你是这个类的派生类吗?”而如果用==比较实际的Class对象,就没有考虑继承——它或者是这个确切的类型,或者不是。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5434575.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存