Автобокс Концепции SCJP

1

Этот вопрос обрабатывается в экзаменационных лабораториях

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--> 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) ---> проходит через короткий (Widdening). Почему его G?

Теги:
scjp

1 ответ

0
Лучший ответ

Не принимайте это как должное, но я думаю, это потому, что байт - это номер, поэтому ему не нужно делать никаких автобоксинга, если он выбирает эту версию. Кроме того, если он все еще выбрал другой, вообще не было бы способа вызвать версию Number. Поэтому имеет смысл говорить, что такие вызовы называют версией Number, что и есть именно то, что делает Java.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню