易截截图软件、单文件、免安装、纯绿色、仅160KB

Java中toArray的用法探究


一.             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并发编程笔记(3)

Publication and Escape 发布一个对象意味着能够从它能够从它当前范围之外被访问到。比如,保存可以被其他代码找到的这个对象的一个引用,或者将其作为一个非私有方法的返回值,或者将其作为参数传递给其它的类。 public static Set<Secret> knownSecrets;
public void initialize() {
knownSecrets = new Ha ......

【奋斗第二天】菜鸟学Java之我的面向对象观续

昨天写了用面向对象的思想去分析一个实际的问题,呵呵,那么今天就就类和对象做一个详细的讨论。
昨天说了在CS中人物可能是一个抽象类或一个接口,而各种各样的人物就是继承或实现了这个接口,而说到这里我们还在讨论类,还没有涉及到对象,那么什么时候产生的对象呢?那是咱登陆了CS后选择了一个人物,然后再我们选好的同 ......

java中的sizeof


关键字: java sizeof
     在C/C++中,当我们想知道一个对象或者一个原始数据类型所占用的内存大小时,只需简单调用sizeof操作符即可,但是,在java中是没有相应的操作符或者方法来直接完成相应功能的。sizeof 在C/C++得到大量的运用,是程序员必不可少的工具之一,那么为什么java却不提供呢?要回 ......

[Java性能剖析]JVM Management API


      
JVM本身提供了一组管理的API,通过该API,我们可以获取得到JVM内部主要运行信息,包括内存各代的数据、JVM当前所有线程及其栈相关信息等
等。各种JDK自带的剖析工具,包括jps、jstack、jinfo、jstat、jmap、jconsole等,都是基于此API开发的。本篇对这部
分内容进行一个详细的说 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号