黑马程序员技术交流社区

标题: [已解决]关于用toArray()方法把集合转数组后的疑问?求详解... [打印本页]

作者: 罗文杰    时间: 2012-5-23 21:13
标题: [已解决]关于用toArray()方法把集合转数组后的疑问?求详解...
本帖最后由 罗文杰 于 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();          //为什么这句会在运行时期报异常?                       
        }
}
异常提示:


作者: 罗文杰    时间: 2012-5-23 21:16
主要疑问是使用toArray()方法后,返回Object[]数组的转换问题,求详解,谢谢大家了~~~{:soso_e163:}
作者: 付左军    时间: 2012-5-23 22:41
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:49
本帖最后由 罗文杰 于 2012-5-23 22:52 编辑
付左军 发表于 2012-5-23 22:41
import java.util.*;
class  Test4
{

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


作者: 罗文杰    时间: 2012-5-23 22:50
付左军 发表于 2012-5-23 22:41
import java.util.*;
class  Test4
{

toArray()方法可以不传参数,返回一个Object类型的数组。
具体见API文档……

作者: 攻城狮    时间: 2012-5-24 01:06
Object[] 与String[]没有父子关系,Object与String有父子关系,所以new Object[]{“aaa”,”bb”}不能强制转换成new String[]{“aaa”,”bb”};,Object x = “abc”能强制转换成String x = “abc”。
详情参见张老师基础加强 数组反射
作者: 黄奇耀    时间: 2012-5-24 01:07
  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 09:36
李南江 发表于 2012-5-24 01:06
Object[] 与String[]没有父子关系,Object与String有父子关系,所以new Object[]{“aaa”,”bb”}不能强制转 ...

:D原来如此~谢谢版主!! 反射那边还没看到,一会儿去查查看看,谢谢了~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2