以下程序打印Object
作为输出,当我删除重载方法包含Object
作为参数时,会出现以下编译时错误:
LangPackage类型中的方法m1(Long)不适用于 arguments(int)
public class A {
public static void main(String args[])
{
int x = 0;
m1(x);
}
static void m1(Long l) {
System.out.println("long");
}
static void m1(Object l) {
System.out.println("Object");
}
}
我的查询是auto-boxing
后加宽Objects
而不是Long
类型
答案 0 :(得分:5)
auto-boxing
将int
添加到Integer
。
Integer
是Object
,但它不是Long
。因此无法选择static void m1(Long l)
。
如果您使用long
参数调用该方法(即如果x
为long
),则会自动将其设置为Long
,并{ {1}}优先于static void m1(Long l)
。
答案 1 :(得分:1)
如果您使用long调用m1,则输出为long
:
m1(1L);
如果使用整数调用 - m1(1)
- Java将使用Object参数选择方法。
如果您将输入参数从Long
更改为long
,long
的输出为m1(1)
:
static void m1(long l) {
这是有效的,因为int
和long
(不是Integer
和Long
)是基本类型,而Java从int
转换为long
像这样的案例。
整数不会延长,反之亦然。但两者都扩展了数字,所以如果你改为:
static void m1(Number n) {
将为m1(1)
答案 2 :(得分:0)
https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
Autoboxing是Java编译器自动转换 原始类型与其对应的对象包装器之间 类。例如,将int转换为Integer,将double转换为a 双,等等。如果转换是另一种方式,那就是 称为拆箱。