【java基础】Java中instanceof关键字的理解

java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

用法: result = object instanceof class 参数: Result:布尔类型。 Object:必选项。任意对象表达式。 Class:必选项。任意已定义的对象类。 说明: 如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

但是instanceof在Java的编译状态和运行状态是有区别的:

在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。

在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。

例子:

接口Person

public interface Person { public void eat(); }

实现类People

public class People implements Person { private int a=0; @Override public void eat() { System.out.println("======"+a); }

}

子类xiaoming:

public class xiaoming extends People { private String name;

@Override public void eat() { System.out.println("+++++++++"); } }

主函数

public static void main(String[] args) { People p=new People(); xiaoming x=new xiaoming(); System.out.println(p instanceof Person); System.out.println(p instanceof xiaoming); -----2 System.out.println(x instanceof Person); System.out.println(x instanceof People); }

注意:上面2处的代码在编译时不会报错。

运行结果:

true false true true

修改自:http://www.jb51.net/article/106795.htm

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2018-02-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python成长之路

实例属性和类属性的理解

1113
来自专栏软件开发 -- 分享 互助 成长

单例模式

一、简介 1、单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2、C++设计一个单例模式的方法如下:         (1)构造函数声明为私有;...

1708
来自专栏Ryan Miao

java基础--相等

学习:http://www.cnblogs.com/dolphin0520/p/3780005.html#3163302 后发现居然有这么个东西,当然也不会注意...

2956
来自专栏互联网杂技

Java中的 toString 方法

1. Object 类中定义有 public String toString() 方法,其返回值是 String 类型,描述当前对象的有关信息;

823
来自专栏Albert陈凯

scala 隐式详解(implicit关键字)

掌握implicit的用法是阅读Spark源码的基础,也是学习Scala其它的开源框架的关键,implicit 可分为: 隐式参数 隐式转换类型 隐式调用...

2759
来自专栏java初学

java — 静态绑定和动态绑定

3318
来自专栏IT可乐

浅谈 Integer 类

  突然发现自己对Integer i = 10;这种语法不太明白,于是乎有了这篇文章,那么在讲解 Integer 之前,我们先看下面这段代码: public s...

1909
来自专栏码云1024

c++ public,protected,private

2697
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列10

Java面试系列10 1 Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? Set里的元素是不能重...

2607
来自专栏GreenLeaves

C# 装箱和拆箱

C#的值类型可以分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型。 1、那么值类型和引用类型能否相互转换呢? 答案是肯定的,C#通过装箱和拆箱来实现两者...

16910

扫描关注云+社区