这个问题是由考试实验室操纵的。
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,因为短大于字节,所以它给出了A
但是,对于其他输出,它应该再次是A,因为B1是字节->字节(自动装箱)->通过简短的(宽度)。为什么是G?
发布于 2014-03-17 16:19:27
不要认为这是理所当然的,但我认为这是因为拜德是一个数字,所以如果它选择这个版本,它不需要进行任何自动装箱。此外,如果它仍然选择另一个,将根本没有办法调用数字版本。因此,让这样的调用调用Number版本更有意义,这正是java所做的。
https://stackoverflow.com/questions/22459231
复制相似问题