首页 > 解决方案 > Java 强制转换为 long 而不是使用正确类型的 varargs 参数的原因是什么?

问题描述

我有一个带参数的方法,(byte... a)并用(long a, long b). 使用两个字节调用该方法会将其强制转换为,long而不是使用提供(byte... a)的具有正确类型的方法。我希望它使用正确类型的方法而不是强制转换它。我的问题是什么让 Java 选择这个模棱两可的情况longbyte

public static void  main(String[] args) {

        byte b = 3;
        foo(b);
        foo(b,b);
        foo(b,b,b);     
    }
    static void foo(byte... a) {

        for(byte elem:a) {
            System.out.print(elem);
        }
        System.out.println();
    }
    static void foo(long a, long b) {
        System.out.println("Java casts these as longs");
    }

这个的输出是

3
Java casts these as longs
333

标签: javacasting

解决方案


推荐阅读