Java 深入理解 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); 		// 通过

数组 Array

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

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

集合 Collection

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

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

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);	// 通过

值为空的实例

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

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

String str = null;
Assert.assertTrue(str instanceof String);	// 报错
Assert.assertTrue(str instanceof Object);	// 报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值