最近框架里那个method(Object...params)引发了一系列的不兼容反应,包括我的生理反应。。。
import java.util.ArrayList;
import java.util.List;
public class TestList {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("wang");
list.add("hello");
list.add("world");
// list不能做为String params的参数
// test(list);
// 不能转换成功。why ?
//test((String[]) list.toArray());
String[] arr = list.toArray(new String[list.size()]);
test(arr);
//源码代看不太懂,toArray方法里面为什么不自己
//new String[list.size()];难道不是做缓冲的吗?
String[] arr2 = list.toArray(new String[1]);//一个长度也成功。这不是耍我吗?
test(arr2);
}
public static void test(String params) {
for (int i = 0; i < params.length; i++) {
System.out.println(params[i]);
}
}
}
1.为什么(String[])list.toArray()转换会出错。
2.实践证明list.toArray(new String[xx])括号里面的是用作缓冲的。当然分配得多速度就会快了。这个影响会有多大了。
java这个设计再次让程序参与到性能中,JVM优化边界在哪?什么时候,我们需要考虑到分配一个和N的内存单元缓冲,在速度上的不同?
这样的时候多吗?如果有,什么时候?