JavaRush /Blog Java /Random-MS /Aras 29. Jawapan kepada soalan temu bual mengenai topik a...
DefNeo
Tahap

Aras 29. Jawapan kepada soalan temu bual mengenai topik aras

Diterbitkan dalam kumpulan
Tahap 29. Jawapan kepada soalan temu bual mengenai topik tahap - 1
  1. Apa yang berlaku autoboxing?

    Autoboxing ialah mekanisme untuk secara tersirat memulakan objek kelas pembalut (Byte, Short, Character, Integer, Long, Float, Double) dengan nilai jenis primitif asal yang sepadan (masing-masing, , , , , , , byte, short) char, inttanpa penggunaan longeksplisit pembina kelas.floatdouble

    Autoboxing berlaku apabila primitif diperuntukkan terus kepada kelas pembalut (menggunakan =operator " "), atau apabila primitif dihantar ke dalam parameter kaedah (seperti "kelas pembalut"). Kedua-dua pembolehubah jenis primitif dan pemalar masa kompilasi (harfiah dan final-primitif) boleh dibungkus secara automatik ke dalam "kelas pembalut". Dalam kes ini, literal mestilah betul dari segi sintaksis untuk memulakan pembolehubah jenis primitif asal.

    Autoboxing pembolehubah jenis primitif memerlukan padanan tepat jenis primitif asal - jenis "kelas pembalut". Sebagai contoh, cubaan autobox pembolehubah jenis byteke dalam Short, tanpa membuat hantaran yang jelas, byte->shortakan menyebabkan ralat kompilasi.

    Autoboxing pemalar jenis primitif membolehkan sempadan padanan yang lebih luas. Dalam kes ini, pengkompil dapat melakukan sambungan tersirat/penyempitan jenis primitif terlebih dahulu. Transformasi berlaku dalam dua peringkat:

    1. pengembangan tersirat (penyempitan) jenis primitif asal kepada jenis primitif yang sepadan dengan kelas pembalut (untuk penukaran int->Byte, pertama pengkompil secara tersirat menyempitkan intkepada byte)

    2. autopacking primitif ke dalam "kelas pembalut" yang sesuai (pem auto pengkompil byte->Byte). walau bagaimanapun, dalam kes ini terdapat dua sekatan tambahan:

      • penetapan primitif kepada "pembungkus" hanya boleh dilakukan menggunakan =pengendali " " (anda tidak boleh menghantar parameter kaedah primitif sedemikian tanpa pemutus jenis eksplisit)

      • jenis operan kiri mestilah tidak lebih lama daripada Character, jenis operan kanan tidak boleh lebih lama daripada int, (sambungan/penyempitan dibenarkan byte <-> short, byte <-> char, short <-> char
        dan hanya menyempitkan byte <- int, short <- int, char <- int, semua pilihan lain memerlukan pemutus jenis eksplisit)

    Ciri tambahan "kelas pembungkus" integer yang dicipta oleh pemalar autoboxing dalam julat -128 +127 ialah ia dicache oleh JVM. Oleh itu, pembalut sedemikian dengan nilai yang sama akan menjadi rujukan kepada satu objek.

  2. Mengapa ia digunakan autoboxing?

    Saya akan memetik kuliah:

    Seperti yang anda ingat, Java mempunyai kedua-dua jenis yang diwarisi daripada kelas Objectdan jenis primitif. Tetapi, ternyata, perkara yang mudah seperti koleksi dan generik hanya boleh berfungsi dengan jenis yang diwarisi daripada 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 значений работает кэширование?

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

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