我看過這篇文章:Is int an object in Java?。如果int不繼承Object,那麼爲什麼「String.format(String,Object ...)」用int的編譯?
在帖子中,有人認爲int
不是從Object
繼承。如果是這樣的話,那麼爲什麼下面的代碼沒有任何錯誤編譯?鑑於int
不是Object
和format()
方法的簽名是public static String format(String format, Object... args)
如文檔所示:javadoc for String!
public class Testing {
public static void main(String[] args) {
int integer = 7;
String str = String.format("%03d", integer);
System.out.println(str);
}
}
我也讀過關於「自動裝箱」的內容。這究竟意味着什麼?在編譯之前所有的原語是否被合適的Object
所取代?如果是這樣,那麼在Integer
的(Integer[]
)上使用大量的int
(int[]
)時,是否有任何內存使用優勢?類似的論點遵循雙等。
任何見解是值得歡迎的。
感謝您的回答,並感謝您澄清我對數組的懷疑。我從你的和其他答案中得出的結論是,自動裝箱是在需要時在本地完成的,因此int []將比Integer []需要更少的空間。你能否詳細說明最後的聲明。你的意思是,如果Integer中包含的值介於-128和127之間,則不使用引用? – 2014-10-04 09:39:56
在實例化-128和127之間的Integer時,如果該值已存在於池中,則JVM將首先在整數池中查找。如果有,則返回包含此值的現有Integer的引用,否則將創建一個新的Integer,將其添加到池中並返回。它使我們能夠減少Integer引用的數量,因爲大部分時間我們使用低整數值而不是高值。 – Dici 2014-10-04 12:09:59
你可以閱讀這個問題的3個第一個答案的一部分,以更好的方式解釋它:http://stackoverflow.com/questions/13098143/java-integer-constant-pool – Dici 2014-10-04 12:14:06