- 被转型变量的编译时类型与目标类型相同;
- 被转型变量的编译时类型是目标类型的父类;
- 被转型变量的编译时类型是目标类型的子类,这种情况是自动向上转换。
- 被转型变量所引用的对象的实际类型必须是目标类型的实例,或者是目标类型的子类,实现类的实力,否则运行时将引发ClassCastException异常。
public class ConversionTest
{
public void conversion()
{
Object object = "Hello";
//object变量的编译类型是Object,是String类型的父类
//可以强制类型转换
//而且object类型实际上引用的也是String,所以运行时也正常
String objStr = (String)object;
//objInt变量的编译类型是object,是String的父类
//可以强制转换
//但是objInt实际引用的是Integer对象
//运行时引发ClassCastException异常
Object objInt = new Integer(4);
String str = (String)objInt;
//strTmp的编译类型是String
//而String不是Math的父类,也不是Math的子类
//所以代码会导致编译出错
String strTmp = "强制转换";
Math math = (Math)strTmp;
}
}
{
String string = null;
System.out.println("null是String的实例:"+(string instanceof String));
}