原因有如下:
Object数组中可以存储int ,string, class等类型,对于计算机来说它不清楚用户最终存储的是什么类型的数据,例如可以存储:
mm[0] = new String("123");
mm[1] = new MyClass();
如果存储以上数据类型,那么你强制转换就是失败的,Object数组存储未知类型,所以无法强制转换某一固定类型的数据,强制转换就会异常。
针对Object数组中某一个具体数据进行强制转换时,可以根据存储的实际类型进行转换处理,能够正常进行,所以是正确的。
以上的说明希望你能明白。
在强制转换之前,会判断对象的类型是否一致, $source instanceof $target
mm[0] 本身是一个String 的对象,所以装换为String 是可以的。
而你的mm是一个Object的数组,它不属于String类型,所以转换会报错。
举个反例:
Object数组里面可以放任意的对象,你先放了2个String 对象,然后放了一个Student 的对象。
首先你要知道,在java中所有一切都可以称做对象,那些啥string,int等类都间接或直接的继承于Object类,所以String是Object 类,你拿String的转成Object的可以,可是你要拿Object转成String的不行
Object数组不能转换成为String[]数组,String[]数组能转换成Object数组,向上转型和向下转型的问题