JavaRush /Java Blog /Random-ID /Level 29. Jawaban pertanyaan wawancara pada topik level
DefNeo
Level 36

Level 29. Jawaban pertanyaan wawancara pada topik level

Dipublikasikan di grup Random-ID
Level 29. Jawaban pertanyaan wawancara tentang topik level - 1
  1. Apa yang terjadi autoboxing?

    Autoboxing adalah mekanisme untuk menginisialisasi objek kelas pembungkus secara implisit (Byte, Short, Character, Integer, Long, Float, Double) dengan nilai tipe primitif aslinya yang sesuai (masing-masing, , , , , , , byte, short) char, inttanpa penggunaan longeksplisit konstruktor kelas.floatdouble

    Autoboxing terjadi ketika primitif secara langsung ditugaskan ke kelas wrapper (menggunakan =operator " "), atau ketika primitif diteruskan ke parameter suatu metode (seperti "kelas wrapper"). Baik variabel tipe primitif maupun konstanta waktu kompilasi (literal dan final-primitif) dapat dikemas secara otomatis ke dalam “kelas pembungkus”. Dalam hal ini, literal harus benar secara sintaksis untuk menginisialisasi variabel tipe primitif asli.

    Autoboxing variabel tipe primitif memerlukan pencocokan persis dengan tipe primitif asli - tipe "kelas pembungkus". Misalnya, mencoba mengotomatiskan variabel tipe byteke dalam Short, tanpa terlebih dahulu membuat pemeran eksplisit, byte->shortakan menyebabkan kesalahan kompilasi.

    Autoboxing konstanta tipe primitif memungkinkan batas pencocokan yang lebih luas. Dalam hal ini, kompiler dapat melakukan perluasan/penyempitan implisit tipe primitif terlebih dahulu. Transformasi terjadi dalam dua tahap:

    1. perluasan implisit (penyempitan) dari tipe primitif asli ke tipe primitif yang sesuai dengan kelas pembungkus (untuk konversi int->Byte, pertama-tama kompiler secara implisit mempersempit intke byte)

    2. pengepakan otomatis suatu primitif ke dalam “kelas pembungkus” yang sesuai (kompiler autopacks byte->Byte). namun, dalam hal ini ada dua batasan tambahan:

      • penugasan primitif ke "wrapper" hanya dapat dilakukan menggunakan =operator " " (Anda tidak dapat meneruskan parameter primitif ke metode tanpa casting tipe eksplisit)

      • jenis operan kiri tidak boleh lebih tua dari Character, jenis operan kanan tidak boleh lebih tua dari int, (perpanjangan/penyempitan diperbolehkan byte <-> short, byte <-> char, short <-> char
        dan hanya penyempitan byte <- int, short <- int, char <- int, semua opsi lain memerlukan pengecoran tipe eksplisit)

    Fitur tambahan dari "kelas pembungkus" bilangan bulat yang dibuat oleh konstanta autoboxing dalam kisaran -128 +127 adalah bahwa mereka di-cache oleh JVM. Oleh karena itu, pembungkus dengan nilai yang sama akan menjadi referensi ke satu objek.

  2. Mengapa digunakan autoboxing?

    Saya akan mengutip ceramahnya:

    Seperti yang Anda ingat, Java memiliki tipe yang diwarisi dari kelas Objectdan tipe primitif. Namun, ternyata, hal yang mudah digunakan seperti koleksi dan obat generik hanya dapat bekerja dengan tipe yang diwarisi dari Object.

  3. Alternatif 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