JavaRush /Java блогу /Random-KY /29-деңгээл. Деңгээлдеги тема боюнча интервью суроолоруна ...
DefNeo
Деңгээл

29-деңгээл. Деңгээлдеги тема боюнча интервью суроолоруна жооптор

Группада жарыяланган
29-деңгээл. Деңгээлдин темасы боюнча интервью суроолоруна жооптор - 1
  1. Эмне болду autoboxing?

    Автобоксbyte - бул орогуч класстарындагы an objectтерди (Байт, Кыска, Символ, Бүтүн, Узун, Float, Double) алардын тиешелүү баштапкы типтеринин (тиешелүүлүгүнө жараша, , , , , , , , short) маанилери менен инициализациялоо механизми char. класстын конструкторун ачык колдонуу .intlongfloatdouble

    Автобокс примитив орогуч классына түз дайындалганда (" =" операторун колдонуу менен) же примитив методдун параметрлерине өткөндө (мисалы, "ороо классы") пайда болот. Примитивдик типтердин өзгөрмөлөрү жана компиляция убактысынын константалары (литералдар жана final-примитивдер) "ороо класстарына" автоматтык түрдө топтолушу мүмкүн. Бул учурда баштапкы примитивдүү түрдөгү өзгөрмөлөрдү инициализациялоо үчүн литералдар синтаксистик жактан туура болушу керек.

    Примитивдик типтеги өзгөрмөлөрдүн автобоксировкасы баштапкы примитивдин түрүнө - "ороо классынын" тибине так дал келүүнү талап кылат. Мисалы, адегенде ачык-айкын трансляция жасабастан түр byteөзгөрмөсүн автобокска салуу аракети компиляция катасын жаратат.Shortbyte->short

    Примитивдүү типтеги константалардын автобоксировкасы кененирээк дал келген чектерге мүмкүндүк берет. Бул учурда, компилятор примитивдик типтердин кыйыр түрдө кеңейтorшин/тартылышын алдын ала аткара алат. Трансформация эки этапта жүрөт:

    1. оригиналдуу примитивдик типти орогуч классына туура келген примитивдик түргө кыйыр түрдө кеңейтүү (тартуу) (конвертациялоо үчүн int->Byte, адегенде компилятор intга кыйыр түрдө тарыйт byte)

    2. примитивди тиешелүү "ороочу класска" автопакеттөө (компилятор автопакеттер byte->Byte). бирок, бул учурда эки кошумча чектөөлөр бар:

      • примитивди "ороого" ыйгаруу " " =операторунун жардамы менен гана аткарылышы мүмкүн (мындай примитивди ачык типтеги кастингсиз ыкманын параметрлерине өткөрө албайсыз)

      • сол операнддын түрү дан улуу болбошу керек Character, оң операнддын түрү , дан улуу болбошу керек int(кеңейтүү/кыйрууга жол берилет byte <-> short, byte <-> char, short <-> char
        жана тарытуу гана byte <- int, short <- int, char <- int, башка бардык варианттар ачык типти кастингди талап кылат)

    -128 +127 диапазонундагы автобокс константалары тарабынан түзүлгөн бүтүн сандардын "ороо класстарынын" кошумча өзгөчөлүгү, алар JVM тарабынан кэштелет. Ошондуктан, бирдей баалуулуктар менен мындай орогучтар бир an objectке шилтемелер болот.

  2. Эмне үчүн колдонулат autoboxing?

    Мен лекциядан үзүндү келтирейин:

    Эсиңизде болсун, Java класстан Objectжана примитивдүү типтерден мурасталган эки түргө ээ. Бирок, белгилүү болгондой, коллекциялар жана генериктер сыяктуу ыңгайлуу нерсе тукум кууп өткөн түрлөр менен гана иштей алат Object.

  3. Альтернативалар autoboxing?

    Не нашел ответа, но запостил на StackOverFlow.

    Исходя из этой дискуссии, получается, что альтернатива autoboxing`у это использование примитивных типов, так How использовние autoboxing`a снижает производительность. Вывод: использовать autoboxing только там где это необходимо.

    Написана статья про Autoboxing: Autoboxing: Traps and Advantages

  4. Типы-обертки для примитивных типов mutable or immutable?

    Immutable, так How примитивные an objectы тоже immutable. Whatбы работать How с Mutable типом есть класс MutableInteger, и.т.д.

  5. Как примитивные типы приводятся к непримитивным аналогам?

    На этот и последующий вопросы хорошо отвечает вот эта статья: Автоупаковка и распаковка в Java

    Это заключение из нее: автоупаковка является механизмом для скрытого преобразования примитивных типов данных в соответствующие классы-оболочки (an objectы). Компилятор использует метод valueOf() чтобы преобразовать примитивные типы в an objectы, а методы IntValue(), doubleValue() и т.д., чтобы получить примитивные типы из an object (то есть обратное преобразование). Автоупаковка преобразует логический тип boolean в Boolean, byte в Byte, char в Character, float в Float, int в Integer, long в Long, short в Short. Распаковка происходит в обратном направлении.

  6. Как непримитивные типы приводятся к примитивным?

    Выше ответил.

  7. Как сравниваются примитивные и непримитивные типы?

    В лекции это подробно рассматривается, но я нашел так скажем тоже самое, но другими словами.

    В Java есть два способа сравнивать an objectы на equalsство, == и метод equals().

    == используется для примитивных типов. Для an objectов «==» это исключительно сравнение ссылок. Для остальных случаев нужно использовать метод equals(). Кроме того метод hashCode() служит (в теории) для той же цели. Хорошим тоном считается, если вы переопределor equals() и hashCode(). После инициализации неких an objectов a и b должно выполняться правило:

    Если выражение a.equals(b) вернет true, то a.hashCode() должен быть equals b.hashCode().

  8. Всегда ли создается новый an object при операции autoboxing?

    Это в лекциях есть:

    Когда мы присваиваем переменной типа Integer meaning типа int, при этом вызывается метод Integer.valueOf: функция valueOf не всегда создает новый an object типа Integer. Она кэширует значения от -128 до 127.

    Если передаваемое meaning выходит за эти пределы, то новый an object создается, а если нет, то нет.

    Если мы пишем new Integer(), то гарантированно создается новый an object. Если мы вызываем Integer.valueOf(), явно or при autoboxing, то этот метод может вернуть для нас How новый an object, так и отдать an object из кэша, если переданное число лежит в диапазоне от -128 до 127.

  9. Как работает кэширование при операции autoboxing?

    Ответил в вопросе выше, на всякий случай создал вопрос на StackOverFlow, но там отвечают тоже самое

  10. Для Howих типов и/or значений работает кэширование?

    В восьмом вопросе. Если у кого – то есть соображения на тему трех последних вопросов, то напишите в комментариях.

Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION