java – 为什么类型提升优先于重载方法的varargs

public class Test
{
    public static void printValue(int i,int j,int k)
    {
        System.out.println("int");
    }

    public static void printValue(byte...b)
    {
        System.out.println("long");
    }

    public static void main(String... args)
    {
        byte b = 9;
        printValue(b,b,b);
    }
}

上面代码输出是“int”.但它应该是“长”因为字节类型参数函数已经存在.但是这里的程序正在将字节值提升为int,但情况并非如此.

有人可以澄清这里发生了什么吗?

解决方法

在重载方法的情况下,变量参数方法将始终是编译器选择的最后一个方法.将字节提升为int(扩展转换)将优先于采用var-arg参数的方法.

这背后的原因是语言需要向后兼容.较旧的功能将优先于较新的功能.理解JLS关于变量参数的说法的一种简单方法是扩大将击败拳击和拳击将击败var-args.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...