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






