Java自動拆裝包的例子
這段代碼在Java 1.5以前是不合法的
Long v = 0口猜;
v += 1葵蒂;
需要寫成這樣:
Long v = 0鬓椭;
v += new Long(1);
在Java 1.5 以后,編譯器幫我們做了上面的工作棵帽。這就是Java的自動拆裝包妹卿,方便了很多旺矾,但是也帶來了可能會讓人忽略的問題蔑鹦。
Java自動拆裝包例子的性能
我們看一個求和的例子:
public static void main(String[] args) {
long time = System.currentTimeMillis();
long sum = 0L;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println("total : " + sum);
System.out.println("process time : " + (System.currentTimeMillis() - time) + "ms");
}
/*
輸出:
total : 2305843005992468481
process time : 820ms
*/
現(xiàn)在我們把long sum = 0L
修改成Long
再看看輸出:
public static void main(String[] args) {
long time = System.currentTimeMillis();
Long sum = 0L;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println("total : " + sum);
System.out.println("process time : " + (System.currentTimeMillis() - time) + "ms");
}
/*
輸出:
total : 2305843005992468481
process time : 9650ms
*/
通過上面的對比,我們看到幾乎同樣的代碼箕宙,long的效率竟然是Long的10倍有多(視機子的配置而定)嚎朽,在上面的例子中我們看到Java的自動拆裝包是編譯期幫我們做了這樣的操作:
sum += i;
// 轉(zhuǎn)化為:
sum += new Long(i);
可想而知柬帕,上面的第二段代碼效率慢的原因是自動拆裝包的鍋哟忍,new了0x7fffffff
多個Long對象,所以效率會下降雕崩。