今天在看On Java 8 的初始化的时候遇到一个非常有意思的问题,简化后的代码如下
public class OnJava8Demo {
//#1
static void f(Integer... args) {
System.out.print("second");
for (Integer i: args) {
System.out.print(" " + i);
}
System.out.println();
}
//#2
static void f(int a,int b,int c){
System.out.println("forth:"+a+" "+b+" "+c);
}
//#3
static void f(Character... args) {
System.out.print("first");
for (Character c: args) {
System.out.print(" " + c);
}
System.out.println();
}
//#4
static void f(Character a,Character b,Character c){
System.out.println("fifth:"+a+" "+b+" "+c);
}
//#5
static void f(char a,char b,char c){
System.out.println("sisth:"+a+" "+b+" "+c);
}
//# main
public static void main(String[] args) {
f('a', 'b', 'c');
}
}
#1~#5是重载函数f,#main是main函数,这段代码最让我感兴趣的是调用f的顺序,经过测试,调用顺序优先度是
#5 > #2 > #4 > #3,#1不会被调用,其中有趣的地方是#2优先级高于#4,这个是我意料之外的,也就是说在重载的时候可能是向上转换优先级高于装箱优先级,这个就仅当作一个经验吧