简单分享一下刚刚学习的instanceof使用,本学习来自《疯狂Java讲义一书》,希望多多交流,有错的地方希望别喷,才刚刚学习Java ,多多指教。
/***************************************
instanceof 正常编译并运行的条件是:
1. 前面的与后面的属于相同类
2. 前面的是属于后面的父类
instanceof 返回true的条件有:
1. 前面的 ‘是’ 后面的子类的实例
2. 前面的 ‘与’ 后面同类型的类的实例
3. 前面的 ‘实现’ 类后面的接口的实例
****************************************/
public class TestInstanceof{
public static void main(String[] args){
//声明hello时候使用的是Object类,则hello 的编译类型是Object Object是所有类的父类
//但是hello变量实际类型是String
Object hello = "Hello!!!";
//String是Object类的子类,所以可以进行instanceof运算,返回true
//下面是判断 hello 是否是后面Object的子类的实例。答案是 true
System.out.println("字符串是否是Object的类实例"+(hello instanceof Object));
//hello是String类,所以返回true
//下面是判断 hello 是否是后面的 String类的实例。答案是 true
System.out.println("字符串是否是String 的类实例"+(hello instanceof String));
//String实现了Comparable 所以返回true
//下面是判断 hello 是否实现后面Comparable的接口的实例。答案是 true
System.out.println("字符串是否是Comparable的实例接口"+(hello instanceof Comparable));
/***************************************************
Math 是Object类的子类,所以可以进行instanceof运算,返回false
hello 既不是后面 Math 的子类,也不是与它同类,没有实现Math的接口,因此返回false
因为hello 编译类型是Object,而Object是Math的父类,符合条件1,因此可以正常编译,并运行
**************************************************************************/
System.out.println("字符串是否是Math的实例"+(hello instanceof Math));
String a = "Hello!!";
/*****************************************************
因为String类型的 a 既不是后面 Math 的子类,也不是与它同类,没有实现Math的接口,因此返回false
因为String 与 Math 没有关系,因此无法通过
*********************************************************/
//System.out.println("字符串是否是Math的实例"+(a instanceof Math));
}
}
------解决思路----------------------
