Autoboxing Concept SCJP

时间:2014-03-17 16:00:23

标签: java scjp

这个问题是由考试实验室操纵的

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?

1 个答案:

答案 0 :(得分:0)

不要认为这是理所当然的,但我认为这是因为字节是一个数字,因此如果选择该版本,则不必进行任何自动装箱。此外,如果它仍然选择另一个,则根本无法调用Number版本。因此,让这样的调用调用Number版本更有意义,这正是java所做的。