A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 罗文杰 于 2012-5-24 09:46 编辑

直接上测试代码……
import java.util.*;
class  Test4
{
        public static void main(String[] args)
        {
                ArrayList<String> al = new ArrayList<String>();
                for(int x = 0; x <= 6; x++)
                {
                        al.add(x,"hello!");
                }
                String[] a =(String[])al.toArray();          //为什么这句会在运行时期报异常?                       
        }
}
异常提示:

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 我着觉这个问题还是蛮精辟的··.

查看全部评分

7 个回复

倒序浏览
主要疑问是使用toArray()方法后,返回Object[]数组的转换问题,求详解,谢谢大家了~~~{:soso_e163:}
回复 使用道具 举报
import java.util.*;
class  Test4
{
        public static void main(String[] args)
        {
                ArrayList<String> al = new ArrayList<String>();
                for(int x = 0; x <= 6; x++)
                {
                        al.add(x,"hello!");
                }
                String[] a =al.toArray(new String[al.size()]);   toArray方法传什么参数,你要搞清,                     
        System.out.println(Arrays.toString(a));
        }
}

回复 使用道具 举报
本帖最后由 罗文杰 于 2012-5-23 22:52 编辑
付左军 发表于 2012-5-23 22:41
import java.util.*;
class  Test4
{

toArray()方法可以不传参数,返回一个Object类型的数组。传参数的应用我晓得的,关键是在于返回Object类型数组后的强转问题。
具体见API文档……

回复 使用道具 举报
付左军 发表于 2012-5-23 22:41
import java.util.*;
class  Test4
{

toArray()方法可以不传参数,返回一个Object类型的数组。
具体见API文档……
回复 使用道具 举报
Object[] 与String[]没有父子关系,Object与String有父子关系,所以new Object[]{“aaa”,”bb”}不能强制转换成new String[]{“aaa”,”bb”};,Object x = “abc”能强制转换成String x = “abc”。
详情参见张老师基础加强 数组反射
回复 使用道具 举报
  1. public static void test2() {
  2.                 ArrayList<String> al = new ArrayList<String>();
  3.                 for (int x = 0; x < 10; x++) {
  4.                         al.add(x, "hello! " + x);
  5.                 }

  6.                 // 返回的是[Ljava.lang.Object;@18a992f
  7.                 System.out.println(al.toArray());
  8.                 // toArray()里面涉及到数组元素的复制,容易出现类型错误
  9.                 // 官方建议使用带参数的toArray(T[] t);
  10.                 Object[] obj = al.toArray();

  11.                 for (int i = 0; i < obj.length; i++) {
  12.                         System.out.println((String) obj[i]);
  13.                 }
  14.         }
复制代码
回复 使用道具 举报
李南江 发表于 2012-5-24 01:06
Object[] 与String[]没有父子关系,Object与String有父子关系,所以new Object[]{“aaa”,”bb”}不能强制转 ...

:D原来如此~谢谢版主!! 反射那边还没看到,一会儿去查查看看,谢谢了~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马