簡體   English   中英

為什么java.lang.Integer不擴展java.lang.Long?

[英]Why doesn't java.lang.Integer extend java.lang.Long?

可以將整數值分配給long變量。 可以將整數值自動裝箱到Long引用變量中。 但是無法將Integer對象分配給Long引用變量。

我的視圖是整數/整數是Long / long支持的特定值范圍。

所以層次結構應該是Integer extends Long和Long extends Number。

觀點邀請。

Long包含一個long構件( value包含的值) Long

如果IntegerLong的子類, Integer將使用基類的long成員,這是浪費的(因為long占用int兩倍),或者忽略它並使用自己的int成員,這將是更浪費(因為在這種情況下, Integer類將包含int成員和基類的long成員)。

原始類型的盒裝版本應該盡可能高效(因為在某些情況下你被迫使用它們,例如Collection s,它不能直接保存基元)。 因此,任何會增加Integer類存儲的類層次結構似乎都是個壞主意。

原因很簡單:如果Integer擴展為Long,那么Integer的實例也將 Long的實例:

Integer i = 0;
if (i instanceof Long) 
    // yes! oops... Integer would be a Long

顯然,這不是數學上的情況,不應該是這種情況。

不要將共享一系列值的類型與使類型共享類層次結構的情況混淆。


關於存儲等的討論是實現細節,與此問題所涉及的語言設計注意事項無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM