JavaRush /Java блогы /Random-KK /Деңгей 29. Деңгейлік тақырып бойынша сұхбат сұрақтарына ж...
DefNeo
Деңгей

Деңгей 29. Деңгейлік тақырып бойынша сұхбат сұрақтарына жауаптар

Топта жарияланған
29-деңгей. Деңгей тақырыбы бойынша сұхбат сұрақтарына жауаптар – 1
  1. Не болды autoboxing?

    Автобокс - орауыш кластарының an objectілерін (Байт, Қысқа, Таңба, Бүтін, Ұзын, Қалқымалы, Екі) сәйкес бастапқы қарабайыр типтерінің мәндерімен (тиісінше, , , , , , , , ) byteжоқ shortжанама түрде инициализациялау механизмі char. класс конструкторын анық пайдалану .intlongfloatdouble

    Автобоксинг примитив орауыш класына тікелей тағайындалғанда (" =" операторы арқылы) немесе примитив әдіс параметрлеріне (мысалы, "орау класы") жіберілген кезде орын алады. Қарапайым түрлердің айнымалылары да, компиляция уақыты тұрақтылары да (литералдар және final-примитивтер) «ораушы сыныптарына» автоматты түрде жинақталады. Бұл жағдайда бастапқы қарабайыр түрдегі айнымалыны инициализациялау үшін литералдар синтаксистік тұрғыдан дұрыс болуы керек.

    Қарапайым типтердің айнымалы мәндерін автобокстау бастапқы примитив түріне – «орау класының» түріне дәл сәйкес келуін талап етеді. Мысалы, алдымен анық трансляция жасамай-ақ byteтүрдегі айнымалы мәнді автоматты қорапқа салу әрекеті компиляция қатесін тудырады.Shortbyte->short

    Қарапайым типті константалардың автобокстауы кеңірек сәйкестік шекараларына мүмкіндік береді. Бұл жағдайда компилятор қарабайыр типтердің жасырын кеңейтілуін/тарылуын алдын ала орындай алады. Трансформация екі кезеңде жүреді:

    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 көмегімен кэштелуі болып табылады. Сондықтан бірдей мәндері бар мұндай қаптамалар бір нысанға сілтеме болады.

  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