本文介紹了為什么這個數字類賦值會起作用(Java)?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我尋找了此副本,但找不到與其足夠相似的副本。
Java中不能實例化抽象類,Number是抽象的,為什么要編譯此行:
Number num = 3;
如果它是Integer Num,它將被自動裝箱,但是自動裝箱在某種程度上也適用于Numbers嗎,盡管它是抽象的?還是發生了其他事情?
推薦答案
自動裝箱不適用于Number
。您完全正確,Number
類是抽象的,不能實例化。此外,Java中也不存在將基元數自動裝箱到Number
對象中的通用機制。
自動裝箱從int
到Integer
。文字3
是int
(沒有例外)。而Integer
是Number
的具體子類,因此將對Integer
的引用放入聲明為Number
的變量中是沒有問題的。
它的效果可能有點令人驚訝,我同意你的觀點。自動裝箱的基本規則是,您可以將int
放在需要Integer
的地方,將double
放在需要Double
的地方,以此類推。我們很難說Integer
必然會出現在您的初始化的右側。無論如何,他們似乎已經將這一規則擴大到適用于這里。這在JLS的某個地方是毫無疑問的(JLS:Java語言規范)。
僅供查看,我們可能會這樣做:
Number num = 3;
System.out.println(num.getClass());
輸出:
類java.lang.Integer
您可以進一步擴展規則:
Object obj = 3;
它仍然為您提供Integer
(不只是Object
,盡管Object
是一個具體的類)。
鏈接:類似問題:Does Java autobox when assigning an int to an Object?(您還可以在那里找到對JLS的引用)
這篇關于為什么這個數字類賦值會起作用(Java)?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,