你可以把强制转换理解成一种特殊的不安全的多态机制
Object obj = new String();
这个是标准的多态,说标准是因为 String 是 Object 的子类
所以用 obj 对象调用 Object 类所有的属性和方法必然能在 String 类中找到,
而 (String) obj 就相当于 String obj = new Object();
这个语法上必然是有问题的,
因为 String 的属性和方法 Object 基本不可能全都有,要不就不是继承了,那是克隆
但是java api提供的方法里有很多是传入一个对象,做一些动作,然后返回该对象的Object类型的,
因为这本身是标准多态的表现,是安全的,但是返回的Object类型对象通常还是需要当做原类型使用,
所以Java提供了强制转换的机制,相当于告诉你,这个事我办不了,你自己看着办啊,
放心,出问题了会抛异常的,你自己去解决就好,我就不费心了
所以总结一下的话:强制转换机制是因为需求而创造的,产生的异常编译器无能为力,
所以属于RuntimeException的范畴一般在你可以确定对象本身的引用类型时使用,
如果无法确定,最好先加上 instanceof 判断:
if (obj instanceof String)
String str = (String)obj |