JavaRush /Блоги Java /Random-TG /Сатҳи 29. Ҷавобҳо ба саволҳои мусоҳиба дар мавзӯи сатҳ
DefNeo
Сатҳи

Сатҳи 29. Ҷавобҳо ба саволҳои мусоҳиба дар мавзӯи сатҳ

Дар гурӯҳ нашр шудааст
Сатҳи 29. Ҷавобҳо ба саволҳои мусоҳиба дар мавзӯи сатҳ - 1
  1. Чӣ гап шудааст autoboxing?

    Автобокс як механизми ба таври ғайримустақим оғоз кардани an objectҳои синфҳои сарпечанда (Байт, Кӯтоҳ, Характер, Интеҷер, Лонг, Флоат, Дучанд) бо арзишҳои навъҳои ибтидоии мувофиқи онҳо (мутаносибан, , , , , , , , byte) shortмебошад char. истифодаи равшани созандаи синф.intlongfloatdouble

    Автобокс вақте рух медиҳад, ки примитив мустақиман ба синфи печанда таъин карда мешавад (бо истифода аз =оператори " ") ё вақте ки примитив ба параметрҳои метод (ба монанди "синфи печанда") интиқол дода мешавад. Ҳарду тағирёбандаҳои навъҳои ибтидоӣ ва константаҳои вақти компилятсионӣ (литералҳо ва final-примитивҳо) метавонанд ба "синфҳои печанда" худкор баста шаванд. Дар ин ҳолат, литералҳо бояд аз ҷиҳати синтаксисӣ дуруст бошанд, то тағирёбандаи навъи ибтидоии ибтидоиро оғоз кунанд.

    Автобокскунии тағирёбандаҳои навъҳои ибтидоӣ мувофиқати дақиқи навъи ибтидоӣ - навъи "синфи печанда" -ро талаб мекунад. Масалан, кӯшиши автоматикӣ кардани тағирёбандаи навъи byteба Short, бидуни анҷом додани як воҳиди возеҳ, byte->shortбоиси хатогии компиляция мегардад.

    Autoboxing константаҳои типи ибтидоӣ имкон медиҳад, ки сарҳадҳои мувофиқро васеътар кунанд. Дар ин ҳолат, компилятор қодир аст, ки пешакӣ васеъкунӣ/тангкунии навъҳои ибтидоиро иҷро кунад. Трансформатсия дар ду марҳила сурат мегирад:

    1. тавсеаи номуайян (танг кардани) навъи ибтидоии ибтидоӣ ба навъи ибтидоӣ, ки ба синфи печанда мувофиқ аст (барои табдor int->Byte, аввал компилятор ба таври ғайримустақим танг intмешавад byte)

    2. ба таври худкор бастабандии примитив ба "синфи мураттабсоз" (компилятор autopacks byte->Byte). аммо дар ин ҳолат ду маҳдудияти иловагӣ вуҷуд дорад:

      • таъини примитивро ба "печанда" танҳо бо истифода аз =оператори " " иҷро кардан мумкин аст (шумо ин гуна примитивро ба параметрҳои метод бидуни рехтани навъи возеҳ интиқол дода наметавонед)

      • навъи операнди чап набояд аз , калонтар бошад Character, навъи операнди рост набояд аз , калонтар бошад int(васеъкунӣ/конструксия иҷозат дода мешавад byte <-> short, byte <-> char, short <-> char
        ва танҳо танг кардан byte <- int, short <- int, char <- int, ҳама вариантҳои дигар кастинги возеҳро талаб мекунанд)

    Дополнительная особенность целочисленных "классов-оберток" созданных автоупаковкой констант в диапазоне -128 +127 , в то что они кэшируются JVM. Потому такие обертки с одинаковыми значениями будут являтся linkми на один an object.

  2. Зачем используется autoboxing?

    Я процитирую лекцию:

    Насколько ты помнишь, в Java есть How типы, унаследованные от класса Object, так и примитивные типы. Но, How оказалось, такая удобная вещь How коллекции и generic’и могут работать только с типами, унаследованными от 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