Java具有基本類型的對象,整數和基本版本int。Java原始實施
的原始版本是更快/輕的/ etc。所以一般來說你應該使用它們。
我想知道爲什麼是Java的的設計者們不僅有對象類型,並使用原始版本的幕後優化。
所以:
Integer foo(Integer alpha)
{
Integer total = 0;
for(Integer counter = 0; counter < alpha; counter++)
{
total += counter;
}
return total;
}
會被編譯成代碼是這樣的:
int foo(int alpha)
{
int total = 0;
for(int counter = 0; counter < alpha; counter++)
{
total += counter;
}
return total;
}
從本質上講,這個假設的java編譯器將整數,雙,浮法,等的情況下,轉換成相當於原始類型。只有在確實需要對象的情況下(比如將元素放入容器中)纔會涉及實際的Integer對象。
注意:上面的代碼已經在Integer對象上使用了運算符,我知道這些運算符實際上是不允許的。由於我正在發明假想的Java編譯器,因此我會假裝這一個像Integer/Float/Double一樣具有特殊的外殼,就像它爲String一樣。
不是一個完全重複的,但我涵蓋了很多的http://stackoverflow.com/questions/5199359/why-do-people-still-use-primitive-types-in-java – corsiKa
@glowcoder這個信息,我知道這一切。但是我想知道是否有什麼會阻止Java在幕後執行所有這些操作,並且不讓我們擔心。也就是說,我們不需要擔心性能問題,因爲編譯器似乎很容易將Long的使用轉換爲long。 –
一個大問題是,你的例子只是簡單的。我很高興java有原始的東西;他們直接映射到硬件,我從來沒有把它們視爲障礙。要求極端逃脫分析工具只是要求太高。想象Integer [],你認爲如何優化,逃避分析並生成與int []相同的代碼(因爲Integer可以爲空)。更多的Integer是不可變的,並且有一個最終的字段,可以阻止某些優化並需要進一步的分析。 – bestsss