Java 自动装箱不到包装器

Java 自动装箱不到包装器,java,autoboxing,Java,Autoboxing,为什么现在a是整数?为什么不兼容类型编译错误?Java教程明确指出: 自动装箱是Java编译器在原语类型与其对应的对象包装器类之间进行的自动转换 为什么Java autobox“3”会在这种情况下变为整数?我看不出有任何理由会出现编译错误。在这种情况下,一旦原语类型3自动装箱到其包装类型Integer,就不会有任何编译错误,因为Integer隐式继承自Object,这意味着您可以轻松地将Integer类型的任何对象分配给Object类型 我不明白为什么原始类型“3”会自动装箱到它的包装器中 输入

为什么现在a是整数?为什么不兼容类型编译错误?Java教程明确指出:

自动装箱是Java编译器在原语类型与其对应的对象包装器类之间进行的自动转换


为什么Java autobox“3”会在这种情况下变为整数?

我看不出有任何理由会出现编译错误。在这种情况下,一旦原语类型
3
自动装箱到其包装类型
Integer
,就不会有任何编译错误,因为
Integer
隐式继承自
Object
,这意味着您可以轻松地将
Integer
类型的任何对象分配给
Object
类型

我不明白为什么原始类型“3”会自动装箱到它的包装器中 输入整数


它必须是自动装箱的,否则,您无法将基元类型分配给类型
对象
。由于接收类型是一个类型
对象
(一个引用类型),因此原语类型必须自动装箱以使其兼容。因此,可以将引用类型指定给引用类型

我看不出有任何理由会出现编译错误。在这种情况下,一旦原语类型
3
自动装箱到其包装类型
Integer
,就不会有任何编译错误,因为
Integer
隐式继承自
Object
,这意味着您可以轻松地将
Integer
类型的任何对象分配给
Object
类型

我不明白为什么原始类型“3”会自动装箱到它的包装器中 输入整数


它必须是自动装箱的,否则,您无法将基元类型分配给类型
对象
。由于接收类型是一个类型
对象
(一个引用类型),因此原语类型必须自动装箱以使其兼容。因此,可以将引用类型指定给引用类型

这适用于你遇到的大多数其他物体;只要两个对象之间有一个共同的祖先,就可以将一个对象指定给另一个对象。这被称为,之所以这样命名是因为它所回答的问题<代码>整数是一个
对象

自动装箱只需获取一个基元类型并将其转换为自身的对象包装表示。没有信息丢失,编译器正在将原语强制转换为
对象
。因此,您的任务是合法的

如果这两个对象之间没有直接关系,则会出现编译错误

例如:

Object a = 3;
System.out.println(a.getClass().getName());
…将导致编译错误,因为无法将
整数
分配给
字符串


,但还有一件事:所有非十进制数字都假定为
int
,除非它们的后缀是
L
L
,在这种情况下,它们是
长的

这适用于你遇到的大多数其他对象;只要两个对象之间有一个共同的祖先,就可以将一个对象指定给另一个对象。这被称为,之所以这样命名是因为它所回答的问题<代码>整数
是一个
对象

自动装箱只需获取一个基元类型并将其转换为自身的对象包装表示。没有信息丢失,编译器正在将原语强制转换为
对象
。因此,您的任务是合法的

如果这两个对象之间没有直接关系,则会出现编译错误

例如:

Object a = 3;
System.out.println(a.getClass().getName());
…将导致编译错误,因为无法将
整数
分配给
字符串


,但还有一件事:所有非十进制数字都假定为
int
,除非它们的后缀是
L
L
,在这种情况下,它们是
long

扩展答案,您也可以使用
Number
,因为
整数也继承自它。但是,您不能使用
LinkedList
或类似的内容。您始终可以将视图降低到一个对象,这就是这里发生的所有事情。例如
objectobj=newlinkedlist()
集合c=新链接列表()也有效。我理解这一点。我不明白为什么原语类型“3”会自动装箱到它的包装器类型Integer。如果可能的话,Java会尝试将
int
自动装箱到
Integer
Integer
int
任何需要的地方,也就是当某个对象需要对象而不是数据类型时,反之亦然(对于其他类型也是如此)。在您的代码中需要一个
对象
,因此Java尝试将
int
自动装箱到
Integer
,并且它可以工作。为了扩展答案,您还可以使用
Number
,因为
Integer
也继承自它。但是,您不能使用
LinkedList
或类似的内容。您始终可以将视图降低到一个对象,这就是这里发生的所有事情。例如
objectobj=newlinkedlist()
集合c=新链接列表()也有效。我理解这一点。我不明白为什么原语类型“3”会自动装箱到它的包装器类型Integer。如果可能的话,Java会尝试将
int
自动装箱到
Integer
Integer
int
任何需要的地方,也就是当某个对象需要对象而不是数据类型时,反之亦然(对于其他类型也是如此)。在您的代码中,需要一个
对象
,因此Java尝试将
int
自动装箱到
Integer
,并且可以正常工作。