Java 深入理解 instanceof

举报
福州司马懿 发表于 2021/11/19 04:01:15 2021/11/19
【摘要】 instanceof 是 Java 中的一个二元操作符,它的作用是测试左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。 不适用的元素 由于 instanceof 是用来判断类实例的...

instanceof 是 Java 中的一个二元操作符,它的作用是测试左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

不适用的元素

由于 instanceof 是用来判断类实例的,因此 Java 中的八种基本数据类型就不能使用该关键字了

八种基本类型分别是

  1. byte
  2. short
  3. int
  4. long
  5. float
  6. double
  7. boolean
  8. char

基本类型的包装类型

整数默认是 Integer 类型;带小数的默认是 Double 类型

Object obj1 = 1;		// Integer
Object obj2 = 1.0;	// Double
Object obj3 = 1l;		// Long
Object obj4 = 1.0f;	// Float

Assert.assertTrue(obj1 instanceof Integer);	// 通过 
Assert.assertTrue(obj2 instanceof Double); 	// 通过
Assert.assertTrue(obj3 instanceof Long);		// 通过
Assert.assertTrue(obj4 instanceof Float); 		// 通过

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

数组 Array

任意类的数组,是一种新的类型,而非原类型

Integer[] array = new Integer[]{1,2,3};
Assert.assertTrue(array instanceof Integer);		// 报错 
Assert.assertTrue(array instanceof Integer[]); 	// 通过

  
 
  • 1
  • 2
  • 3

集合 Collection

对于泛型集合,instanceof 只能帮我们判断主体类型是否正确,而无法校验内部具体的泛型类型是否合适

List<Integer> list = new ArrayList<>();
Assert.assertTrue(list instanceof List);			// 通过
Assert.assertTrue(list instanceof ArrayList);	// 通过

  
 
  • 1
  • 2
  • 3

Object

Object 是所有类的基类。因此所有非空对象 instanceof Object,都为 true
实际上,将任意类赋给它的基类,并不会让该对象有任何损失,该对象依旧是初始化它时的类型

Object obj1 = 1;
Assert.assertTrue(obj1 instanceof Integer);	// 通过
Assert.assertTrue(obj1 instanceof Object);	// 通过

Object obj2 = "str";
Assert.assertTrue(obj1 instanceof String);		// 通过
Assert.assertTrue(obj1 instanceof Object);	// 通过

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

值为空的实例

如果对象为初始化,也就是值为空。

null instanceof Object 合法,但值为 false,意思是 null 不是任意类的实例

String str = null;
Assert.assertTrue(str instanceof String);	// 报错
Assert.assertTrue(str instanceof Object);	// 报错

  
 
  • 1
  • 2
  • 3

文章来源: blog.csdn.net,作者:福州-司马懿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/chy555chy/article/details/104024804

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。