可以将整数值分配给long变量。 可以将整数值自动装箱到Long引用变量中。 但是无法将Integer对象分配给Long引用变量。
我的视图是整数/整数是长/长支持的特定值范围。
所以层次结构应该是Integer extends Long和Long扩展Number。
邀请观点。
答案 0 :(得分:7)
Long
包含long
成员(value
),其中包含Long
的值。
如果Integer
是Long
的子类,Integer
将使用基类的long
成员,这是浪费的(因为long
占用的字节数是int
)的两倍,或者忽略它并使用自己的int
成员,这会更浪费(因为在这种情况下,Integer
类将同时包含int
成员和基类的long
成员。)
原始类型的盒装版本应该尽可能高效(因为在某些情况下你被迫使用它们,例如Collection
s,它们不能直接保存基元)。因此,任何会增加Integer
类存储的类层次结构似乎都是个坏主意。
答案 1 :(得分:4)
原因很简单:如果Integer扩展为Long,那么Integer的实例也将 Long的实例:
Integer i = 0;
if (i instanceof Long)
// yes! oops... Integer would be a Long
显然,这不是数学上的情况,不应该是这种情况。
不要将共享一系列值的类型与使类型共享类层次结构的情况混淆。
关于存储等的讨论是实现细节,与此问题所涉及的语言设计注意事项无关。