最近框架里那個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的內存單元緩沖,在速度上的不同?
這樣的時候多嗎?如果有,什么時候?