java中toArray用法注意事项

时间:2023-01-29 20:06:19

java中toArray正确用法有三种,toArray方法都需要带参数:

Java代码 java中toArray用法注意事项
  1. publicstaticString[]vectorToArray1(Vector<String>v){
  2. String[]newText=newString[v.size()];
  3. v.toArray(newText);
  4. returnnewText;
  5. }
  6. publicstaticString[]vectorToArray2(Vector<String>v){
  7. String[]newText=(String[])v.toArray(newString[0]);
  8. returnnewText;
  9. }
  10. publicstaticString[]vectorToArray3(Vector<String>v){
  11. String[]newText=newString[v.size()];
  12. String[]newStrings=(String[])v.toArray(newText);
  13. returnnewStrings;
  14. }

而不带参数的toArray()是不行的,运行时会报ClassCastException异常:

Java代码 java中toArray用法注意事项
  1. publicstaticString[]vectorToArray4(Vector<String>v){
  2. String[]newText=(String[])v.toArray();
  3. returnnewText;
  4. }

原因分析:

toArray有两个方法:

Java代码 java中toArray用法注意事项
  1. publicObject[]toArray(){
  2. Object[]result=newObject[size];
  3. System.arraycopy(elementData,0,result,0,size);
  4. returnresult;
  5. }
  6. publicObject[]toArray(Objecta[]){
  7. if(a.length<size)
  8. a=(Object[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(),size);
  9. System.arraycopy(elementData,0,a,0,size);
  10. if(a.length>size)
  11. a[size]=null;
  12. returna;
  13. }

不带参数的方法,构造并返回一个Object数组对象,这时候向下转型为String数组对象,导致类型不兼容,报错。

而带参数的方法,构造的数组对象类型和参数的类型一致,故不存在转型。


转:http://ocre.iteye.com/blog/1354264