自动装箱,然后在Java中加宽

时间:2017-11-19 08:48:49

标签: java autoboxing

以下程序打印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类型

的原因

3 个答案:

答案 0 :(得分:5)

auto-boxingint添加到Integer

IntegerObject,但它不是Long。因此无法选择static void m1(Long l)

如果您使用long参数调用该方法(即如果xlong),则会自动将其设置为Long,并{ {1}}优先于static void m1(Long l)

答案 1 :(得分:1)

如果您使用long调用m1,则输出为long

m1(1L);

如果使用整数调用 - m1(1) - Java将使用Object参数选择方法。

如果您将输入参数从Long更改为longlong的输出为m1(1)

static void m1(long l) {

这是有效的,因为intlong(不是IntegerLong)是基本类型,而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   双,等等。如果转换是另一种方式,那就是   称为拆箱。