JavaRush /Blog Jawa /Random-JV /Tingkat 29. Wangsulan pitakonan wawancara babagan topik t...
DefNeo
tingkat

Tingkat 29. Wangsulan pitakonan wawancara babagan topik tingkat

Diterbitake ing grup
Level 29. Wangsulan pitakonan wawancara babagan topik level - 1
  1. Apa sing kedadeyan autoboxing?

    Autoboxing minangka mekanisme kanggo nginisialisasi obyek kelas bungkus (Byte, Short, Character, Integer, Long, Float, Double) kanthi nilai jinis primitif asli sing cocog (masing-masing, , , , , , , byte, short) char, inttanpa nggunakake longeksplisit saka konstruktor kelas.floatdouble

    Autoboxing dumadi nalika primitif langsung ditugasake menyang kelas bungkus (nggunakake =operator " "), utawa nalika primitif diterusake menyang parameter metode (kayata "kelas bungkus"). Variabel saka jinis primitif lan konstanta wektu kompilasi (aksara lan final-primitif) bisa dikemas kanthi otomatis dadi "kelas pambungkus". Ing kasus iki, literal kudu bener sintaksis kanggo miwiti variabel saka jinis primitif asli.

    Autoboxing saka variabel jinis primitif mbutuhake match pas jinis primitif asli - jinis "kelas wrapper". Contone, nyoba autobox variabel jinis bytemenyang Short, tanpa nggawe cast eksplisit, byte->shortbakal nimbulaké kesalahan kompilasi.

    Autoboxing saka konstanta jinis primitif ngidini kanggo wates cocog luwih akeh. Ing kasus iki, compiler bisa nindakake ekstensi implisit / narrowing jinis primitif ing advance. Transformasi dumadi ing rong tahap:

    1. ekspansi implisit (penyempitan) saka jinis primitif asli menyang jinis primitif sing cocog karo kelas pambungkus (kanggo konversi int->Byte, pisanan kompiler kanthi implisit sempit intdadi byte)

    2. autopacking saka primitif menyang cocok "kelas wrapper" (ing autopacks compiler byte->Byte). Nanging, ing kasus iki ana rong watesan tambahan:

      • penugasan primitif menyang "wrapper" mung bisa ditindakake kanthi nggunakake =operator " " (sampeyan ora bisa ngliwati paramèter metode primitif kasebut tanpa casting jinis eksplisit)

      • jinis operand kiwa ora kudu luwih lawas saka Character, jinis operand tengen ora kudu lawas saka int, (extension / constriction diijini byte <-> short, byte <-> char, short <-> char
        lan mung narrowing byte <- int, short <- int, char <- int, kabeh opsi liyane mbutuhake casting jinis eksplisit)

    Fitur tambahan saka "kelas wrapper" integer digawe dening konstanta autoboxing ing kisaran -128 +127 iku padha cached dening JVM. Mulane, pambungkus kasebut kanthi nilai sing padha bakal dadi referensi kanggo siji obyek.

  2. Kenapa digunakake autoboxing?

    Aku bakal ngutip ceramah:

    Nalika sampeyan ngelingi, Jawa nduweni loro jinis sing diwarisake saka kelas Objectlan jinis primitif. Nanging, ternyata, barang sing trep kaya koleksi lan generik mung bisa digunakake karo jinis sing diwarisake saka 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 значений работает кэширование?

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

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