一个数组定义的小问题

豪哥super叼 2018-03-23 03:00:19
public class toArray {
public static void main(String[] args) {
String a="s",b="A",c="B";
Collection<String> str1=new ArrayList<String>();
str1.add(a);
str1.add(b);
str1.add(c);
String str[]=new String[1];
String str2[]=str1.toArray(str);
for(int i=0;i<str2.length;i++) {
System.out.println(str2[i]);
}
}
}

有点纠结
String str[]=new String[0];
String str2[]=str1.toArray(str); 这一句的含义是什么,书本说是获得一个包含所有对象的指定类型数组,但是我很纠结中间的过程,谁是指定对象,而且str1[]定义的长度不是1吗,为什么能全部赋值给str2[]呢,求各位计算机大牛帮忙下呗!
...全文
377 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
iLemon 2018-03-23
  • 打赏
  • 举报
回复
只是将Collection转换成了数组,当然数组的类型和你的参数“”str“”一致,内容就是变量str1中的元素。 看看JDK文档吧: toArray <T> T[] toArray(T[] a)返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将根据指定数组的运行时类型和此 collection 的大小分配一个新数组。 如果指定的数组能容纳 collection 并有剩余空间(即数组的元素比 collection 的元素多),那么会将数组中紧跟在 collection 末尾的元素设置为 null。(这对确定 collection 的长度很有用,但只有 在调用方知道此 collection 没有包含任何 null 元素时才可行。) 如果此 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。 像 toArray 方法一样,此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许在输出数组的运行时类型上进行精确控制,并且在某些情况下,可以用来节省分配开销。 假定 l 是只包含字符串的一个已知 List。以下代码用来将该列表转储到一个新分配的 String 数组: String[] x = (String[]) v.toArray(new String[0]); 注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。 参数: a - 存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。 返回: 包含此 collection 元素的数组 抛出: ArrayStoreException - 指定数组的运行时类型不是此 collection 每个元素运行时类型的超类型。 NullPointerException - 如果指定的数组为 null。
shiqing0115 2018-03-23
  • 打赏
  • 举报
回复
String str[]=new String[0]; String str2[]=str1.toArray(str); 这里面str不足以容纳str1时 会产生一个新的数组,之前的str 不变 你可以打印出来看看, 新的数组用str2[]接收了 其实常见的写法应该是: String str[]=new String[0]; str[]=str1.toArray(str); //这样子数组str会总动扩容
  • 打赏
  • 举报
回复
把str1转化为定义为str定义的类型的数组,长度是str1的实际长度啊。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧