Java中toArray的用法探究(java数组与list转换)
一. Incident
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
String[] tt =(String[]) list.toArray(new String[0]);
}
}
这段代码是没问题的,但我们看到String[] tt =(String[]) list.toArray(new String[0]) 中的参数很奇怪,然而去掉这个参数new String[0]却在运行时报错。。。
二. Root Cause Analysis
经研究发现toArray有两个方法:
public Object[] toArray() {
Object[] result = new Object[size];
System.arraycopy(elementData, 0, result, 0, size);
return result;
}
不带参数的toArray方法,是构造的一个Object数组,然后进行数据拷贝,此时进行转型就会产生ClassCastException,这也就是上述问题的root cause了。
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;
}
而
相关文档:
一直觉得所有的语言中Java是最好的,就开始学了起来。希望记下这些,对自己和以后的学习者有帮助!当然这只是我个人的一点学习感悟,大牛到此可绕过,如有看法,不吝赐教。
一门语言基本的逻辑结构和类型基本是一样的。所以我认为Java语言的基础学习应该从 ......
package com.algrothim.sample.plo;
/**
* @author yuan
*这一个判断一个字符串是否为回文的例子。
*里面借助三个重要的数据结构的知识:
*栈,队列,以及引用。
*此程序的原理是:根据栈的后进先出,以及队列的先进先出的原理。
*两个ADT是同步的,如果从栈出来的字符与从队列出来的字符全部一样,
*说明为 ......
起到第一道安全保障作用的”双亲委派类加载模型”
双亲委派方式的类加载,指的是优先从顶层启动类加载器开始,自顶向下的方式加载类的模型(参见第一条类装载器体系结构)。
这种模型的好处是,底层的类装载器装载的类无法与顶层类装载器装载的类相互调用。
哪怕是同包下的类,只要他们不属于同一类装载器, ......
测试环境:
SDK:Oracle JRockit for Java version 6, Java Communication for Windows 2.0
OS:WINDOWS7
外设:串口条形码扫描枪
Server:Tomcat6
看了网上良莠不齐的关于Applet访问串口的文章,总结起来所关注的问题无外乎以下3个:
1. 三个文件(comm.jar、javax.comm.properties和win3 ......
如何用JAVA 对象?
写简单下给我看下 谢谢了
创建类 名字 =new 设String 几个都可以。 在用复制 输出
在下面继续创建类 后面最好标注上//这样看起来简单下谢谢了
求解决 类和对象没学明白老师讲的我糊涂 迷糊做不出来。 ......