本文地址:http://www.dutycode.com/instanceof_shiyong_jiqiao.html

除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。

instanceof是java里面的一个二元操作符,主要来判断一个对象是否是一个类的实例。

但是,真的会用吗?

看下面的代码,看看你能答对几个?

package com.dutycode.blog.example.instanceexpamle;

import java.util.Date;

/**

* instanceof的使用

* @author dutycode@gmail.com

* @site www.dutycode.com

*/

public class InstanceOfExample {

public static void main(String[] args) {

//String对象是否属于Object实例?

System.out.println( "String" instanceof Object);

//String对象是否属于String实例?

System.out.println(new String() instanceof String);

//Object对象是否属于String实例?

System.out.println(new Object() instanceof String);

//拆箱类型是否是装箱类型的实例?

System.out.println('A' instanceof Character);

//null是否是String的实例

System.out.println(null instanceof String);

//类型转换后的null是否是String的实例

System.out.println((String) null instanceof String);

//判断date对象是否是String的实例

System.out.println(new Date() instanceof String);

//在范型中判断string是否是Date的实例

System.out.println(new DemoClass().isDateInstance("string"));

}

}

class DemoClass{

public boolean isDateInstance(T t){

return t instanceof Date;

}

}

解析:

1、true

"String"instanceof Object 这个肯定是true, String类型的对象是继承自Object的,所以这个是true

2、true

new String() instanceof String ,一个类的对象,自然是这个类的实例

3、false

new Object() instanceof String , object是所有类的父类,所以肯定不是String的实例了。

4、编译不通过

'A' instanceof Character ,为啥呢?char类型不是Character的实例吗?为啥不行? 这里涉及到一个instanceof的原则:instanceof只能用于对象的判断,不能用于基本类型的判断。 这里’A’ 是个char类型的,char是个基本数据类型,所以无法使用instanceof判断,也就会编译不通过了。

5、false

null instanceof String , null是没有类型的, instanceof有个特有的原则:如果左值是null类型,则就直接返回false,这样做也是很有好处的,这样我们再判断的时候,不需要判断对象是否为null值了。

6、false

(String) null instanceof String, 可能这个会有疑问,既然我都强转成String类型了,为什么还是false呢?原因在于,null是个万能类型,即上面说的是没有类型的。所以,即使你再前面加上了String的强转,他依旧是null类型,这样就符合了上面的那个原则:如果左值是Null,则直接返回false

7、编译不通过

new Date() instanceof String, 是不是有个大大的问号?instanceof的使用中,有这么个原则:instance操作符左值和右值(或者称作 左右操作数)必须有继承关系或者实现关系,否则会编译不通过。此案例中,Date和String没有任何继承或者实现关系。所以,自然就编译不通过了。

8、false

new DemoClass().isDateInstance("string”) , 有了上面的那个案例,你可能会觉得这个应该是编译不通过的啊,毕竟String和Date之间没有继承和实现关系。 但是!java的泛型是为编码服务的,主要目的是帮助程序猿发现类型的不匹配,在编译器编译成字节码之后,T已经是Object类型了。所以isDateInstance方法的内容实际上就是Object instanceof String, 那么自然也就是false了。

总结:

instanceof的几个原则:

1、instanceof只能用于对象的判断,不能用于基本数据类型的判断。

2、instanceof的左右两个操作数,必须有继承或者实现关系,否则不能变已通过。

3、instanceof的左操作数如果是null,则直接返回false,不再运算右操作数是什么类。

java中instanceof 详解,神奇的instanceof相关推荐

  1. Java中CAS详解

    转载自  Java中CAS详解 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换 ...

  2. Java中LinkedList详解

    Java中LinkedList详解 LinkedList底层是双向链表 单向链表 双向链表 LinkedList新增的方法 主要增加了针对头结点与尾结点进行操作的方法, 即针对第一个元素和最后一个元素 ...

  3. Java中super详解

    目录 Java中super详解 super的作用: 1.     通过super可以访问父类的构造方法 2.   通过super可以访问父类的属性(非私有) 3.        通过super可以访问 ...

  4. java中匿名内部类详解_java 中匿名内部类的实例详解

    搜索热词 java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈&q ...

  5. java中priorityqueue_详解JAVA中priorityqueue的具体使用

    Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度, ...

  6. java中implement_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,Java中不支持多重继承,但是可以用接口来实 ...

  7. java中final详解_Java中final用法与详解

    Java中final用法与详解 final作为Java中经常用到的关键字,了解final的使用方法是非常有必要的.这里从final关键字在数据域.方法和类中三个方面分析final关键字的主要用法. f ...

  8. java中getclass_详解java中this.getClass()和super.getClass()的实例

    详解java中this.getClass()和super.getClass()的实例 前言: 遇到this.getClass()和super.getClass()的返回值感到疑惑,经过探索豁然开朗. ...

  9. java中File详解

    #第六部分:IO流 ##1. File类的作用 File类是Java.io包中唯一代表磁盘我呢见本身的对象.File类定义类一些与平台无关的方法 来操作文件,File类主要用来获取或处理与磁盘文件相关 ...

最新文章

  1. python3x 线程threading的使用
  2. 创建Silverlight自定义启动画面
  3. R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息、数值数据的描述性统计(Numerical data)、离散型数据的描述性统计(Categorical)
  4. Li‘s 影像组学视频学习笔记(10)-T检验+lasso+随机森林、Li‘s have a solution and plan.
  5. [ Luogu 4626 ] 一道水题 II
  6. 读债务危机0812:接管房利美和房地美
  7. Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)
  8. Boost.MultiIndex 使用重排工具的例子
  9. 安卓三维展示源码_手机(安卓)自动化脚本开发线上培训
  10. 这是霄哥的天气预报,屌不屌?
  11. oracle查询 :一个角色包括的系统权限,对象权限,Oracle有多少种角色,某个用户有什么角色
  12. 个人用户升级鸿蒙,老用户等到了!鸿蒙升级标准确定,“三岁”以下机型全更新...
  13. tomcat配置及其中部分目录作用虚拟路径虚拟主机
  14. Uinttest +excel结合使用--详细讲解
  15. [算法]bitmap算法
  16. 13-微信小程序商城 产品简介布局(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)
  17. 蓝牙厂商代码与公司对应列表
  18. mysql PTA题解查询平均成绩最高的前三名同学
  19. 一个完整的软件开发过程到底需要哪些步骤?
  20. 参考文献中英文人名_参考文献中英文人名的写法

热门文章

  1. 分享一些 VsCode 各场景相关的高级调试与使用技巧
  2. 推荐几本关于R语言的书
  3. 直接打开开发者选项,绕过oppo恶心的验证码
  4. 据说80%的人都不懂,你会控制你的债务吗?
  5. EXCEL02:Excel的快捷操作
  6. ubuntu没有进入python直接import 导致鼠标变成十字
  7. multi-class分类模型评估指标的定义、原理及其Python实现
  8. HTML静态网页作业——餐品管理 5页
  9. 管理感悟:平和的心态是企业平稳发展的决定因素
  10. mysql ibdata1 作用_Mysql优化ibdata1大小