代码如下:
public class Test
{
public static void main(String[] args)
{
Object[] mm = new Object[2];
mm[0] = new String("123");
mm[1] = new String("456");
System.out.println(mm[0]);//ok
String str = (String)mm[0];
System.out.println(str);//ok
String []strs = (String[])mm;//throw ClassCastexpection
System.out.println(strs[0]);
}
}
请问什么一个元素强制类型转换可以,数组强制类型转换由不行?
原因有如下:
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 的对象。