Java强制类型转换

代码如下:
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数组中某一个具体数据进行强制转换时,可以根据存储的实际类型进行转换处理,能够正常进行,所以是正确的。

    以上的说明希望你能明白。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-18

在强制转换之前,会判断对象的类型是否一致,  $source instanceof $target

mm[0] 本身是一个String 的对象,所以装换为String 是可以的。

而你的mm是一个Object的数组,它不属于String类型,所以转换会报错。

举个反例:
Object数组里面可以放任意的对象,你先放了2个String 对象,然后放了一个Student 的对象。

本回答被提问者采纳
第2个回答  2016-11-18
首先你要知道,在java中所有一切都可以称做对象,那些啥string,int等类都间接或直接的继承于Object类,所以String是Object 类,你拿String的转成Object的可以,可是你要拿Object转成String的不行
第3个回答  2016-11-18
Object数组不能转换成为String[]数组,String[]数组能转换成Object数组,向上转型和向下转型的问题

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网