Java初学习 - toArray的一点说明
2014-10-31 10:43
225 查看
java中toArray正确用法有三种,toArray方法都需要带参数:
Java代码
public static String[] vectorToArray1(Vector<String> v) {
String[] newText = new String[v.size()];
v.toArray(newText);
return newText;
}
public static String[] vectorToArray2(Vector<String> v) {
String[] newText = (String[])v.toArray(new String[0]);
return newText;
}
public static String[] vectorToArray3(Vector<String> v) {
String[] newText = new String[v.size()];
String[] newStrings = (String[])v.toArray(newText);
return newStrings;
}
而不带参数的toArray()是不行的,运行时会报ClassCastException异常:
Java代码
public static String[] vectorToArray4(Vector<String> v) {
String[] newText = (String[])v.toArray();
return newText;
}
原因分析:
toArray有两个方法:
Java代码
public Object[] toArray() {
Object[] result = new Object[size];
System.arraycopy(elementData, 0, result, 0, size);
return result;
}
public Object[] toArray(Object a[]) {
if (a.length < size)
a = (Object[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size);
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
不带参数的方法,构造并返回一个Object数组对象,这时候向下转型为String数组对象,导致类型不兼容,报错。
而带参数的方法,构造的数组对象类型和参数的类型一致,故不存在转型。
Java代码
public static String[] vectorToArray1(Vector<String> v) {
String[] newText = new String[v.size()];
v.toArray(newText);
return newText;
}
public static String[] vectorToArray2(Vector<String> v) {
String[] newText = (String[])v.toArray(new String[0]);
return newText;
}
public static String[] vectorToArray3(Vector<String> v) {
String[] newText = new String[v.size()];
String[] newStrings = (String[])v.toArray(newText);
return newStrings;
}
而不带参数的toArray()是不行的,运行时会报ClassCastException异常:
Java代码
public static String[] vectorToArray4(Vector<String> v) {
String[] newText = (String[])v.toArray();
return newText;
}
原因分析:
toArray有两个方法:
Java代码
public Object[] toArray() {
Object[] result = new Object[size];
System.arraycopy(elementData, 0, result, 0, size);
return result;
}
public Object[] toArray(Object a[]) {
if (a.length < size)
a = (Object[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size);
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
不带参数的方法,构造并返回一个Object数组对象,这时候向下转型为String数组对象,导致类型不兼容,报错。
而带参数的方法,构造的数组对象类型和参数的类型一致,故不存在转型。
相关文章推荐
- Java初学习 - CallBack的一点说明
- Java初学习 - 线程同步的一点说明
- 初学Java的一点体会
- java初学都必须懂得的概念(用代码说明)
- JAVA初学容易碰壁的一点:大小写问…
- 关于javabean的数据库连接 和分页 代码 效率不是最高的 ,能给初学的人一点帮助
- Java初学习 - 取子串,查找串,去空格常用JAVA中去掉空格 1. String.trim() trim()是去掉首尾空格 2.str.replace(" ", ""); 去掉所有的方法说明
- 关于java中几个CP的一点说明--stringBuilder和stringBuffer与hashTable和hashMap
- java和tomcat配置的一点说明
- Java初学习 - 自动拆装箱的说明
- JAVA初学,对面向对象的一点理解
- Android初学习 - Inflate()方法的一点说明
- Java 转型—应用toArray()的一点启示,[ public string[] toarry ]
- Android布局文件Value中设置格式字符串并在Java代码中使用的一点说明
- Android初学习 - excludeFromRecents属性的一点说明
- [一点笔记]Java ExecutorService四种线程池的例子与说明
- java 关于操作Collection的一点说明
- Java初学习 - enum(枚举)的一点说明
- 初学java,有空就来总结一点
- 自己初学JAVA的一点感悟