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

前端之家收集整理的这篇文章主要介绍了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.

猜你在找的Java相关文章