Java语言中,有一个叫做instanceof的运算符,它能够判断一个对象是否归属于某一个类或它的子类。instanceof运算符的书写格式为:
其中a是一个对象,也可以是指向某个对象的引用,而X则表示一个类的名称。如果a是X或X子类的对象,则运算结果为true,否则运算结果为false。以下的【例05_11】演示了如何使用instanceof运算符判断对象所属类型。
【例05_11 instanceof运算符】
Exam05_11.java
- public class Exam05_11 {
- public static void main(String[] args) {
- Student s = new Student();
- Person p1 = new Person();
- Person p2 = new Student();
- System.out.println(s instanceof Student);//①
- System.out.println(s instanceof Person);//②
- System.out.println(p1 instanceof Student); //③
- System.out.println(p2 instanceof Student);//④
- System.out.println(new Student() instanceof Student);//⑤
- System.out.println(new Student() instanceof Person);//⑥
- System.out.println(null instanceof Person);//⑦
- }
- }
【例05_11】中,语句①-⑦ 使用instanceof运算符进行了7次运算,这些运算的结果分别是:true、true、false、true、true、true、false。下面逐一分析每条语句的运算过程。语句① 中,引用s指向了Student类的对象,所以运算结果为true。语句② 中,s所指向的对象属于Student类,而Student又是Person的子类,所以运算结果也为true。语句③ 中,p1所指向的是一个Person类对象,然而并非所有Person类对象都属于Student类,所以运算结果为false。语句④中,引用p2的类型虽然是Person,但它实际指向的却是一个Student类的对象,所以运算结果为true。语句⑤、⑥实际上是语句①、②的翻版,只不过是把instanceof运算符左边的引用换成了对象,所以运算结果与语句①、②的运算结果相同,均为true。语句⑦是一种较为特殊的情况,instanceof运算符左边是空对象null。在Java语言中,只要空对象出现在instanceof运算符左边,其运算结果都为false,所以语句⑦的运算结果为false。