JavaRush /Java Blog /Random-TL /Antas 29. Mga sagot sa mga tanong sa panayam sa antas ng ...
DefNeo
Antas

Antas 29. Mga sagot sa mga tanong sa panayam sa antas ng paksa

Nai-publish sa grupo
Antas 29. Mga sagot sa mga tanong sa panayam sa paksa ng antas - 1
  1. Anong nangyari autoboxing?

    Ang Autoboxing ay isang mekanismo para sa tahasang pagsisimula ng mga bagay ng mga klase ng wrapper (Byte, Short, Character, Integer, Long, Float, Double) na may mga halaga ng kanilang katumbas na orihinal na mga primitive na uri (ayon sa pagkakabanggit, , , , , , , byte, short) char, intnang walang longtahasang floatpaggamit doubleng tagabuo ng klase.

    Ang autoboxing ay nangyayari kapag ang isang primitive ay direktang itinalaga sa isang klase ng wrapper (gamit ang " =" operator), o kapag ang isang primitive ay ipinasa sa mga parameter ng isang paraan (tulad ng isang "klase ng wrapper"). Ang parehong mga variable ng primitive na uri at compile-time constants (literal at final-primitives) ay maaaring i-autopack sa "wrapper classes". Sa kasong ito, dapat na syntactically tama ang mga literal upang masimulan ang isang variable ng orihinal na primitive na uri.

    Ang autoboxing ng mga variable ng primitive na uri ay nangangailangan ng eksaktong tugma ng uri ng orihinal na primitive - ang uri ng "wrapper class". Halimbawa, ang pagtatangkang i-autobox ang isang variable ng uri bytesa Short, nang hindi muna gumagawa ng tahasang cast, byte->shortay magdudulot ng error sa compilation.

    Ang autoboxing ng primitive type constants ay nagbibigay-daan para sa mas malawak na pagtutugma ng mga hangganan. Sa kasong ito, ang compiler ay makakapagsagawa ng implicit na extension/pagpapaliit ng mga primitive na uri nang maaga. Ang pagbabagong-anyo ay nangyayari sa dalawang yugto:

    1. implicit expansion (narrowing) ng orihinal na primitive type sa primitive na uri na naaayon sa wrapper class (para sa conversion int->Byte, una ang compiler ay implicit na paliitin intsa byte)

    2. autopacking ng isang primitive sa naaangkop na "wrapper class" (ang compiler autopacks byte->Byte). gayunpaman, sa kasong ito mayroong dalawang karagdagang paghihigpit:

      • Ang pagtatalaga ng primitive sa isang "wrapper" ay maaari lamang gawin gamit ang " =" operator (hindi mo maipapasa ang naturang primitive sa mga parameter ng pamamaraan nang walang tahasang uri ng pag-cast)

      • ang uri ng kaliwang operand ay hindi dapat mas matanda kaysa sa Character, ang uri ng kanang operand ay hindi dapat mas matanda kaysa sa int, (extension/constriction ay pinapayagan byte <-> short, byte <-> char, short <-> char
        at pagpapaliit lamang byte <- int, short <- int, char <- int, lahat ng iba pang mga opsyon ay nangangailangan ng tahasang uri ng casting)

    Ang isang karagdagang tampok ng integer na "mga klase ng wrapper" na nilikha ng mga constant ng autoboxing sa hanay na -128 +127 ay ang mga ito ay naka-cache ng JVM. Samakatuwid, ang mga naturang wrapper na may parehong mga halaga ay magiging mga sanggunian sa isang bagay.

  2. Bakit ito ginagamit autoboxing?

    Sipiin ko ang panayam:

    Tulad ng naaalala mo, ang Java ay may parehong mga uri na minana mula sa klase Objectat mga primitive na uri. Ngunit, tulad ng nangyari, ang isang maginhawang bagay tulad ng mga koleksyon at generic ay maaari lamang gumana sa mga uri na minana mula sa Object.

  3. Mga alternatibo 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 значений работает кэширование?

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

Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION