为什么这个 Number class 赋值有效 (java)?
Why does this Number class assignment work (java)?
我寻找了这个副本,但没有找到足够相似的副本来满足。
你不能在Java中实例化抽象类,而Number是抽象的,那么为什么这一行编译:
Number num = 3;
如果它是 Integer num,它会被自动装箱,但是自动装箱是否也适用于 Number,即使它是抽象的?还是发生了其他事情?
Integer
是 Number
的子类,因此 3
从 int
自动装箱到 Integer
,然后存储 Integer
在 Number
变量中。
并不是自动装箱适用于 Number
。您完全正确,Number
class 是抽象的,无法实例化。 Java.
中也不存在将原始数字自动装箱为 Number
对象的通用机制
自动装箱从 int
到 Integer
。文字 3
是 int
(无一例外)。 Integer
是 Number
的具体子 class,因此将对 Integer
的引用放入声明为 Number
的变量中是没有问题的。
它的工作原理可能有点令人惊讶,我同意你的看法。自动装箱的基本规则是您可以在需要 Integer
的地方放置 int
,在需要 Double
的地方放置 double
,等等。我们很难说 Integer
一定会出现在初始化的右侧。无论如何,他们似乎已经将规则扩展到此处适用。毫无疑问,在 JLS 的某个地方(JLS: Java Language Specification)。
只是为了检查我们可能会做:
Number num = 3;
System.out.println(num.getClass());
输出:
class java.lang.Integer
您可以进一步扩展规则:
Object obj = 3;
它仍然给你一个 Integer
(不只是一个 Object
,尽管 Object
是一个具体的 class)。
Link: 类似问题:Does Java autobox when assigning an int to an Object?(您还会在那里找到对 JLS 的引用)
我寻找了这个副本,但没有找到足够相似的副本来满足。
你不能在Java中实例化抽象类,而Number是抽象的,那么为什么这一行编译:
Number num = 3;
如果它是 Integer num,它会被自动装箱,但是自动装箱是否也适用于 Number,即使它是抽象的?还是发生了其他事情?
Integer
是 Number
的子类,因此 3
从 int
自动装箱到 Integer
,然后存储 Integer
在 Number
变量中。
并不是自动装箱适用于 Number
。您完全正确,Number
class 是抽象的,无法实例化。 Java.
Number
对象的通用机制
自动装箱从 int
到 Integer
。文字 3
是 int
(无一例外)。 Integer
是 Number
的具体子 class,因此将对 Integer
的引用放入声明为 Number
的变量中是没有问题的。
它的工作原理可能有点令人惊讶,我同意你的看法。自动装箱的基本规则是您可以在需要 Integer
的地方放置 int
,在需要 Double
的地方放置 double
,等等。我们很难说 Integer
一定会出现在初始化的右侧。无论如何,他们似乎已经将规则扩展到此处适用。毫无疑问,在 JLS 的某个地方(JLS: Java Language Specification)。
只是为了检查我们可能会做:
Number num = 3;
System.out.println(num.getClass());
输出:
class java.lang.Integer
您可以进一步扩展规则:
Object obj = 3;
它仍然给你一个 Integer
(不只是一个 Object
,尽管 Object
是一个具体的 class)。
Link: 类似问题:Does Java autobox when assigning an int to an Object?(您还会在那里找到对 JLS 的引用)