Object a = 3;
System.out.println(a.getClass().getName());为什么A现在是Integer?为什么不兼容类型编译错误?Java教程明确指出:
自动装箱是Java编译器在基本类型和它们对应的对象包装类之间进行的自动转换。
为什么在这种情况下Java自动箱'3‘到Integer?
发布于 2017-07-22 15:13:00
这适用于您遇到的大多数其他对象;只要两个对象之间有一个共同的祖先,就可以将其中一个分配给另一个对象。它被称为是-a,其命名是因为它回答了一个问题。Integer 是 Object。
自动装箱只需接受基本类型并将其转换为自身的对象包装器表示形式。没有丢失任何信息,编译器正在胁迫一个原语,使其成为一个Object。因此,你的任务是合法的。
如果这两个对象之间没有直接关系,那么您将得到一个编译错误。
例如:
String a = 3;...would会导致编译错误,因为Integer不能分配给String。
您可以在这里阅读其他自动装箱规则。,但还有一件事:所有非十进制数都被假定为int,除非它们以L或l作为后缀,在这种情况下,它们是long。
发布于 2017-07-22 14:47:05
我不认为有任何理由应该有一个编译错误。在本例中,原语类型3自动装箱到包装器类型Integer后,不应该出现任何编译错误,因为Integer隐式地从Object继承,这意味着您可以轻松地将Integer类型的任何对象分配给Object类型。
我不明白原语类型'3‘为什么会自动装箱到包装器类型Integer。
它必须是自动装箱的,否则,您就不能将基元类型分配给类型Object。由于接收类型是类型Object (引用类型),所以必须自动封装原语类型以使其兼容。因此,可以将引用类型分配给引用类型。
https://stackoverflow.com/questions/45255768
复制相似问题