这个问题是由考试实验室操纵的
public class B{
public static void main(String args[]){
byte g =10;
Byte x = new Byte(g);
B p= new B();
p.doStuff(x);
p.doStuff(g);
}
void dostuff(Number y){
System.out.println("C");
}
void doStuff(short t){
System.out.println("X");}
}
输出:XC
在上面的节目中,我不明白为什么给予" C"作为输出?
它给出X因为Byte - >字节 - >短;
但是,如果是,字节g = 10;它应该再次通过相同的方法并给出" X"作为输出。
public class B{
public static void main(String args[]){
byte b1=12;
Byte B1=new Byte(b1);
capture(b1);
capture(B1);
}
static void capture(short x){
System.out.print("A");
}
static void capture(Number x){
System.out.print("G");
}
}
输出:AG
在这里,我也理解为什么它的A,因为short比字节大,所以它给出了A
但是,对于其他输出,它应该再次为A,因为B1是Byte ---> byte(Autoboxing)--->传递short(Widdening)。为什么是G?
答案 0 :(得分:0)
不要认为这是理所当然的,但我认为这是因为字节是一个数字,因此如果选择该版本,则不必进行任何自动装箱。此外,如果它仍然选择另一个,则根本无法调用Number版本。因此,让这样的调用调用Number版本更有意义,这正是java所做的。