instanceof用法

instanceof是Java中的一个二元运算符,用于测试它左边的对象是否是它右边的类的实例,返回boolean的数据类型。当对象是右边类或子类所创建对象时,返回true;否则,返回false。以下是instanceof的基本语法:

boolean result = object instanceof class

在这里,object是你要检查的对象,class是你想要检查的类。如果objectclass的实例,那么result将会是true,否则将会是false

例如,你可以使用instanceof来检查一个对象是否是某个特定类的实例:

if (object instanceof MyClass) {
    // object是MyClass的实例
} else {
    // object不是MyClass的实例
}

这种用法在你需要根据对象的类型来执行不同的操作时非常有用。例如,你可能有一个方法接受一个Object类型的参数,但是你需要根据参数的实际类型来执行不同的操作。在这种情况下,你可以使用instanceof来检查参数的类型。

需要注意的是,null用instanceof跟任何类型比较时都是false。此外,instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系(子类),也就是说需要位于同一个继承树,否则会编译错误。

另外

if (person instanceof Teacher teacher) {
    teacher.play();
    teacher.teach();
}
//=======================================
if (person instanceof Teacher) {
    Teacher teacher = (Teacher) person;
    teacher.play();
    teacher.teach();
}

这两段代码的功能是相同的,都是检查person是否是Teacher类的实例,如果是,就调用play()teach()方法。但是,它们的写法有所不同。

第一段代码:

if (person instanceof Teacher teacher) {
    teacher.play();
    teacher.teach();
}

这段代码使用了Java 14及以后版本的模式匹配特性。如果personTeacher的实例,那么它会被自动转型为Teacher并赋值给teacher变量,然后你就可以在if语句的代码块中使用teacher变量了。

第二段代码:

if (person instanceof Teacher) {
    Teacher teacher = (Teacher) person;
    teacher.play();
    teacher.teach();
}

这段代码在Java 14之前的版本中是常见的做法。首先使用instanceof检查person是否是Teacher的实例,如果是,就需要手动将person转型为Teacher并赋值给teacher变量。

总的来说,第一段代码更简洁,因为它将检查和转型两个操作合并在一起了。而第二段代码则需要分两步进行:先检查person的类型,然后再进行转型。这就是它们的区别。如果你使用的是Java 14及以后的版本,我建议你使用第一种写法,因为它更简洁,也更符合Java的最新特性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值