大家好,又见面了,我是你们的朋友全栈君。
最近在写代码的时候需要用到的List的toArray方法。可是程序报错了
报错代码大致这样的
public void find(){
List<String> list = new ArrayList<String>();
list.add("have");
list.add("no");
list.add("problem");
String[] arr = (String[]) list.toArray();
for(String str : arr){
System.out.println(str);
}
}
这里在执行toArray方法时报如下异常
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
起初想,不是加了类型转换了嘛。怎么还……,后来查了一下,将toArray的用法大致整理如下
第一种用法:在toArray方法中添加参数 new String[0]
public void find(){
List<String> list = new ArrayList<String>();
list.add("have");
list.add("no");
list.add("problem");
String[] arr = list.toArray(new String[0]);
for(String str : arr){
System.out.println(str);
}
}
打印如下结果
have
no
problem
第二种用法:仍然是toArray方法添加参数,区别看代码
public void find(){
List<String> list = new ArrayList<String>();
list.add("have");
list.add("no");
list.add("problem");
String[] arr = new String[list.size()];
list.toArray(arr);
for(String str : arr){
System.out.println(str);
}
}
仍然打印正确结果,注意的是,这里数组arr的最小长度为list的大小,否则转化结束后,数组arr中全是空值。当然比list的大小还要大,是可以的
第三种方法:不加参数,但是接受toArray方法返回的值变量类型需为Object[]
public void find(){
List<String> list = new ArrayList<String>();
list.add("have");
list.add("no");
list.add("problem");
Object[] arr = list.toArray();
for(Object str : arr){
System.out.println(str);
}
}
这样也可以打印正确结果
后来发现在数组变量前添加类型转化似乎是行不通的,基本数据类型之间这样转化编译时就报错了
是否还有其他用法有待后面的学习,先大致记录如上
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146363.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...