JavaRush /Java blogi /Random-UZ /29-daraja. Daraja mavzusi bo'yicha suhbat savollariga jav...
DefNeo
Daraja

29-daraja. Daraja mavzusi bo'yicha suhbat savollariga javoblar

Guruhda nashr etilgan
29-daraja. Daraja mavzusi bo'yicha suhbat savollariga javoblar - 1
  1. Nima bo'ldi autoboxing?

    Autoboxingbyte - bu o'rash sinflari ob'ektlarini (bayt, qisqa, belgi, butun, uzun, float, Double) mos keladigan dastlabki ibtidoiy turlari (mos ravishda, , , , , , , , short) qiymatlari bilan bilvosita ishga tushirish mexanizmi char. sinf konstruktoridan aniq foydalanish .intlongfloatdouble

    Avtobokslash ibtidoiy toʻgʻridan-toʻgʻri oʻrash sinfiga tayinlanganda (“ =” operatori yordamida) yoki ibtidoiy usul parametrlariga (“oʻrash sinfi” kabi) oʻtkazilganda sodir boʻladi. Ikkala ibtidoiy turdagi o'zgaruvchilar va kompilyatsiya vaqti konstantalari (literal va final-primitives) "o'rash sinflari" ga avtomatik tarzda to'planishi mumkin. Bunday holda, asl ibtidoiy tipdagi o'zgaruvchini ishga tushirish uchun harflar sintaktik jihatdan to'g'ri bo'lishi kerak.

    Ibtidoiy turdagi o'zgaruvchilarni avtobokslash asl ibtidoiy turiga - "o'rash sinfi" turiga to'liq mos kelishini talab qiladi. Misol uchun, avval aniq translatsiya qilmasdan turi byteo'zgaruvchisini avtomatik qutiga solishga urinish kompilyatsiya xatosiga olib keladi.Shortbyte->short

    Primitiv tipdagi konstantalarni avtobokslash chegaralarni kengroq moslashtirish imkonini beradi. Bunday holda, kompilyator oldindan ibtidoiy turlarni yashirin kengaytirish/toraytirishni amalga oshirishga qodir. Transformatsiya ikki bosqichda amalga oshiriladi:

    1. asl ibtidoiy turni o'rash sinfiga mos keladigan ibtidoiy turga yashirin kengaytirish (toraytirish) (konvertatsiya qilish uchun int->Byteavval kompilyator intga to'g'ridan-to'g'ri torayadi byte)

    2. ibtidoiyni tegishli "o'rash sinfi" ga autopacking (kompilyator autopacks byte->Byte). ammo, bu holda ikkita qo'shimcha cheklovlar mavjud:

      • "o'rash" ga primitivni tayinlash faqat " =" operatori yordamida amalga oshirilishi mumkin (siz bunday primitivni aniq turdagi quymasiz usul parametrlariga o'tkazib bo'lmaydi)

      • chap operand turi dan katta bo'lmasligi kerak Character, o'ng operand turi , dan katta bo'lmasligi kerak int(kengaytirish/konstriksiyaga ruxsat beriladi byte <-> short, byte <-> char, short <-> char
        va faqat toraytirish byte <- int, short <- int, char <- int, boshqa barcha variantlar aniq turdagi quyishni talab qiladi)

    -128 +127 diapazonidagi avtoboks konstantalari tomonidan yaratilgan butun sonli "o'rash sinflari" ning qo'shimcha xususiyati shundaki, ular JVM tomonidan keshlanadi. Shuning uchun, bir xil qiymatlarga ega bo'lgan bunday o'ramlar bitta ob'ektga havola bo'ladi.

  2. Nima uchun ishlatiladi autoboxing?

    Men ma'ruzadan iqtibos keltiraman:

    Esingizda bo'lsa, Java sinfdan meros bo'lib o'tgan ikkala turga ham Object, ibtidoiy turlarga ham ega. Ammo, ma'lum bo'lishicha, to'plamlar va generiklar kabi qulay narsa faqat meros qilib olingan turlar bilan ishlashi mumkin 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 значений работает кэширование?

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

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