自动装箱不包装
Autoboxing not to wrapper
Object a = 3;
System.out.println(a.getClass().getName());
为什么a现在是整数?为什么不兼容的类型编译错误? Java 教程明确指出:
Autoboxing is the automatic conversion that the Java compiler makes between the primitive types and their corresponding object wrapper classes.
为什么 Java 在这种情况下将“3”自动装箱为整数?
我看不出有任何编译错误的原因。一旦本例中的基本类型 3
自动装箱为其包装类型 Integer
,就不会有任何编译错误,因为 Integer
隐式继承自 Object
,这意味着您可以轻松地将类型 Integer
的任何对象分配给类型 Object
.
I don't understand why primitive type '3' is autoboxed to its wrapper
type Integer.
它必须是自动装箱的,否则,你不能将原始类型分配给类型Object
。由于接收类型是 Object
类型(reference 类型),因此必须自动装箱 primitive 类型以使其兼容。因此,您可以将 reference 类型分配给 reference 类型。
这适用于您遇到的大多数其他对象;只要两个对象之间有共同的祖先,就可以将一个分配给另一个。这被称为 is-a,并因其所回答的问题而得名。 Integer
是一个 Object
。
自动装箱只是采用原始类型并将其转换为自身的对象包装器表示。没有信息丢失,编译器将原语强制转换为 Object
。因此,您的分配是合法的。
如果两个对象之间没有直接关系,那么您会遇到编译错误。
例如:
String a = 3;
...会导致编译错误,因为 Integer
无法分配给 String
。
You may peruse other autoboxing rules here,但还有一件事:所有非十进制数都被假定为 int
,除非它们以 L
或 l
为后缀,其中如果他们是 long
.
Object a = 3;
System.out.println(a.getClass().getName());
为什么a现在是整数?为什么不兼容的类型编译错误? Java 教程明确指出:
Autoboxing is the automatic conversion that the Java compiler makes between the primitive types and their corresponding object wrapper classes.
为什么 Java 在这种情况下将“3”自动装箱为整数?
我看不出有任何编译错误的原因。一旦本例中的基本类型 3
自动装箱为其包装类型 Integer
,就不会有任何编译错误,因为 Integer
隐式继承自 Object
,这意味着您可以轻松地将类型 Integer
的任何对象分配给类型 Object
.
I don't understand why primitive type '3' is autoboxed to its wrapper type Integer.
它必须是自动装箱的,否则,你不能将原始类型分配给类型Object
。由于接收类型是 Object
类型(reference 类型),因此必须自动装箱 primitive 类型以使其兼容。因此,您可以将 reference 类型分配给 reference 类型。
这适用于您遇到的大多数其他对象;只要两个对象之间有共同的祖先,就可以将一个分配给另一个。这被称为 is-a,并因其所回答的问题而得名。 Integer
是一个 Object
。
自动装箱只是采用原始类型并将其转换为自身的对象包装器表示。没有信息丢失,编译器将原语强制转换为 Object
。因此,您的分配是合法的。
如果两个对象之间没有直接关系,那么您会遇到编译错误。
例如:
String a = 3;
...会导致编译错误,因为 Integer
无法分配给 String
。
You may peruse other autoboxing rules here,但还有一件事:所有非十进制数都被假定为 int
,除非它们以 L
或 l
为后缀,其中如果他们是 long
.