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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马上都有 中级黑马   /  2014-5-20 18:12  /  1652 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public void demo()
{
        ArrayList<String> al = new ArrayList<String>();
        al.add("abc1");
        al.add("abc2");
        al.add("abc3");
               
        String[] arr = al.toArray(new String[al.size()]),
}

把集合中的元素转化成字符串数组,不是al.toArray()就可以吗?
为什么还要new String[al.size()]呢?帮忙解释解释。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 观决 于 2014-5-20 18:39 编辑


api里面有啊  不加及时Object 下面那个加了泛型  那个里面size  api也说得很清楚 小了会自动补全 多了就多了

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
因为你用了泛型啊 为了保证类型不能变 要new一个String类型的数组
回复 使用道具 举报
你的数组定义的是Sting类型的,而这个toArray方法是用到了泛型的,使用需要加上String类型,al.size是指新的数组大小
回复 使用道具 举报
String[] arr = al.toArray(new String[al.size()]),
你的这句话也可以写成String[] arr = al.toArray(new String[]{});
回复 使用道具 举报
什么是泛型呀?路过......
回复 使用道具 举报
如果不加new String[al.size()],就必须在al.toArray()前面强转成String[]类型的数组
回复 使用道具 举报
由于泛型。

不过在这个事例中,用al.toArray(new String[])与al.toArray()没有什么区别,即便是Collections.toString(al)打印也看不出区别。这是因为String类复写了toString()方法,如果换成没有复写的toString()方法的类,那可能就要悲剧了。

有没有画蛇添足?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马