class OverloadingVarargs2 { static void f(float i, Character... args) { System.out.println("first"); System.out.println(i); } static void f(Character... args) { System.out.println("second"); } static void test() { f(1, 'a'); f('b', 'c'); // the method f is ambiguous } }
该代码无法编译,编译器说f含糊。但是我认为第二种方法可以f('b', 'c');解决什么问题?
f('b', 'c');
这是因为无法确定该方法调用是应调用变量args还是应调用float和变量args。
Java决定以这种方式来调用拓宽>装箱>变量args的方法,但是在这种情况下,两者都具有变量args。
在这种情况下,基本上将char扩展为浮动。
Java基元的扩展顺序为:
byte -> short -> int -> long -> float -> double char -> int -> long -> float -> double