Java中数组向下转型,编译没问题,运行却报错???

Object[]a={"a","b","c"};String[]b={"q","a","f"};Object[]os=(Object[])b;//向上转型,可以输出,没有... Object[] a = { "a", "b", "c" };
String[] b = { "q", "a", "f" };
Object[] os = (Object[]) b; //向上转型,可以输出,没有问题
System.out.println(os);
System.out.println("------------");
String[] as = (String[]) a; //向下强转,编译没有任何问题,运行报错???
System.out.println(as);

报错:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

谢谢!!!
展开
 我来答
赤壁赋白
2014-03-26 · TA获得超过988个赞
知道小有建树答主
回答量:338
采纳率:100%
帮助的人:234万
展开全部

异常提示不可以直接转,换这样写String[] as = Arrays.asList(a).toArray(new String[0]);

楼主你首先异常那里概念没有弄清,在java中分为运行时异常runtime Exception,以及一般的Exception,如图

你这个就属于运行时异常,编译是不会报错的,编译不报错不代表没有错误,你写个int a =1;int b = 0;  输出 a/b编译也不会出粗,但是运行就报除数不为0异常了。

追问
我的重点是,为什么向下转型会报错?
追答
楼上已经给出解释了( 猫是动物,但是动物不一定是猫啊……)
碧血归邪
推荐于2018-04-23 · TA获得超过401个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:106万
展开全部
不是编译不报错,程序就没有问题的。难道那些有bug甚至崩溃的程序没经过编译?
Java只支持一种向下转型,就是要转的类型本身就是那个类型的向上转型,比如代码中的os,父类直接转子类是会发生运行时异常的,所以如果要向下转型可以用instanceof进行判断要向下转型的父类对象是否是子类的实例,此题是if(a instanceof String[]),为真时才可转换(注意:String和String[]是不同类型)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-26
展开全部
编译时,编译器看的是引用变量的类型,只要它是目的类型的父类或子类或者同类型,编译就通的过。而运行时,还是要看它实际引用的对象的类型,若目的类型跟实际引用类型没有关系,就会报类型转换异常了……
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
feixue19880521
2014-03-26 · TA获得超过103个赞
知道小有建树答主
回答量:130
采纳率:100%
帮助的人:89.8万
展开全部
当然不行啦,比如说:猫是动物,但是动物不一定是猫啊……

Object[] a = { "a", "b", "c" };
String[] b = { "q", "a", "f" };
Object[] os = (Object[]) b; //向上转型,可以输出,没有问题
System.out.println(Arrays.toString(os));
System.out.println("------------");
String[] as = new String[a.length]; //向下强转,编译没有任何问题,运行报错???
for (int i = 0; i < as.length; i++)
{
as[i] = (String)a[i];
}
System.out.println(Arrays.toString(as));

或者instanceof
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9c862cd
2014-03-26
知道答主
回答量:42
采纳率:0%
帮助的人:31.3万
展开全部
http://bbs.csdn.net/topics/390028191参考一下这个帖子不,希望你能找到答案;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式