您的位置:首页 > 编程语言 > Java开发

instanceof 学习心得(1)-来自疯狂Java讲义一书

2015-09-20 19:09 726 查看

/***************************************
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));
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java