为什么输出结果是long啊


public class test {
    public static void main(String[] args) {
        Foo foo = new Foo();
        foo.test(1);
    }
}

class Foo {
    void test(byte a) {
        System.out.println("byte");
    }

    void test(int... a) {
        System.out.println("int...");
    }

    void test(short a) {
        System.out.println("short");
    }

    void test(long a) {
        System.out.println("long");
    }
}

为什么输出结果是long啊。

int类型后面为啥加...呢? 整型常量默认是int型,四个重载函数与int最接近的是long型,把...去掉的话,才是int型

可变参数方法和不可变参数方法,优先匹配不可变参数方法

这个问题往深了说是编译器处理方法重载的问题,是静态分派问题, 编译器遇到重载方法时,是根据外观类型作为判定依据的。靠外观类型(静态类型)决定方法执行版本的分派动作称为静态分派,也可以把这一部分归为解析。
简单的说,当你有方法重载的时候,编译器会推断一个相对合适的版本。
如果有多个父类(或者说范围更高的类型),会在继承关系中从下向上开始搜索,越接近上层,优先级越低,参数传入null也可以。
而可变类型参数的优先级最低,你的int...是可变类型
这篇文章可能适合你浅谈JVM(六):方法调用过程