严格来说 instanceof 是 Java 中的一个双目运算符,由于它是由字母组成的,所以也是 Java 的保留关键字。在 Java 中可以使用 instanceof 关键字判断一个对象是否为一个类(或接口、抽象类、父类)的实例,语法格式如下所示。
boolean result = obj instanceof Class
其中,obj 是一个对象,Class 表示一个类或接口。obj 是 class 类(或接口)的实例或者子类实例时,结果 result 返回 true,否则返回 false。
下面介绍 Java instanceof 关键字的几种用法。
1)声明一个 class 类的对象,判断 obj 是否为 class 类的实例对象(很普遍的一种用法),如以下代码:
Integer integer = new Integer(1);
System.out.println(integer instanceof Integer); // true
2)声明一个 class 接口实现类的对象 obj,判断 obj 是否为 class 接口实现类的实例对象,如以下代码:
Java 集合中的 List 接口有个典型实现类 ArrayList。
public class ArrayList
implements List
所以我们可以用 instanceof 运算符判断 ArrayList 类的对象是否属于 List 接口的实例,如果是返回 true,否则返回 false。
ArrayList arrayList = new ArrayList();
System.out.println(arrayList instanceof List); // true
或者反过来也是返回 true
List list = new ArrayList();
System.out.println(list instanceof ArrayList); // true
3)obj 是 class 类的直接或间接子类
我们新建一个父类 Person.class,代码如下:
public class Person {
}
填写下面表单即可预约申请免费试听java课程!害怕学不会?助教陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
创建 Person 的子类 Man,代码如下:
public class Man extends Person {
}
测试代码如下:
Person p1 = new Person();
Person p2 = new Man();
Man m1 = new Man();
System.out.println(p1 instanceof Man); // false
System.out.println(p2 instanceof Man); // true
System.out.println(m1 instanceof Man); // true
第 4 行代码中,Man 是 Person 的子类,Person 不是 Man 的子类,所以返回结果为 false。
值得注意的是 obj 必 须为引用类型,不能是基本类型。例如以下代码:
int i = 0;
System.out.println(i instanceof Integer); // 编译不通过
System.out.println(i instanceof Object); // 编译不通过
所以,instanceof 运算符只能用作对象的判断。
当 obj 为 null 时,直接返回 false,因为 null 没有引用任何对象。
Integer i = 1;
System.out.println(i instanceof null); // false
所以,obj 的类型必 须是引用类型或空类型,否则会编译错误。
当 class 为 null 时,会发生编译错误,错误信息如下:
Syntax error on token "null", invalid ReferenceType
所以 class 只能是类或者接口。
下一篇: 没有了
一级建造师二级建造师消防工程师造价工程师土建职称房地产经纪人公路检测工程师建筑八大员注册建筑师二级造价师监理工程师咨询工程师房地产估价师 城乡规划师结构工程师岩土工程师安全工程师设备监理师环境影响评价土地登记代理公路造价师公路监理师化工工程师暖通工程师给排水工程师计量工程师
执业药师执业医师卫生资格考试卫生高级职称护士资格证初级护师主管护师住院医师临床执业医师临床助理医师中医执业医师中医助理医师中西医医师中西医助理口腔执业医师口腔助理医师公共卫生医师公卫助理医师实践技能内科主治医师外科主治医师中医内科主治儿科主治医师妇产科医师西药士/师中药士/师临床检验技师临床医学理论中医理论