JavaRush /Java-Blog /Random-DE /Level 29. Antworten auf Interviewfragen zum Levelthema
DefNeo
Level 36

Level 29. Antworten auf Interviewfragen zum Levelthema

Veröffentlicht in der Gruppe Random-DE
Level 29. Antworten auf Interviewfragen zum Thema Level - 1
  1. Was ist passiert autoboxing?

    Autoboxing ist ein Mechanismus zum impliziten Initialisieren von Objekten von Wrapper-Klassen (Byte, Short, Character, Integer, Long, Float, Double) mit den Werten ihrer entsprechenden ursprünglichen primitiven Typen (bzw. , , , , , , byte, short) char, intohne longexplizite floatVerwendung doubledes Klassenkonstruktors.

    Autoboxing tritt auf, wenn ein Grundelement direkt einer Wrapper-Klasse zugewiesen wird (mit dem =Operator „ “) oder wenn ein Grundelement an die Parameter einer Methode (z. B. einer „Wrapper-Klasse“) übergeben wird. Sowohl Variablen primitiver Typen als auch Konstanten zur Kompilierungszeit (Literale und final-Primitive) können automatisch in „Wrapper-Klassen“ gepackt werden. In diesem Fall müssen Literale syntaktisch korrekt sein, um eine Variable des ursprünglichen primitiven Typs zu initialisieren.

    Das Autoboxing von Variablen primitiver Typen erfordert eine genaue Übereinstimmung mit dem Typ des ursprünglichen Primitivs – dem Typ der „Wrapper-Klasse“. Wenn Sie beispielsweise versuchen, eine Typvariable automatisch bytein ein Boxformat umzuwandeln Short, ohne zuvor eine explizite Umwandlung durchzuführen, byte->shortführt dies zu einem Kompilierungsfehler.

    Das Autoboxing von Konstanten primitiven Typs ermöglicht breitere Übereinstimmungsgrenzen. In diesem Fall ist der Compiler in der Lage, vorab eine implizite Erweiterung/Eingrenzung primitiver Typen durchzuführen. Die Transformation erfolgt in zwei Schritten:

    1. implizite Erweiterung (Verengung) des ursprünglichen primitiven Typs auf den primitiven Typ, der der Wrapper-Klasse entspricht (für die Konvertierung int->Byteverengt der Compiler zunächst implizit intauf byte)

    2. Automatisches Packen eines Grundelements in die entsprechende „Wrapper-Klasse“ (der Compiler führt automatische Packs durch byte->Byte). Allerdings gibt es in diesem Fall zwei zusätzliche Einschränkungen:

      • Die Zuweisung eines Grundelements zu einem „Wrapper“ kann nur mit dem =Operator „ “ erfolgen (Sie können ein solches Grundelement nicht ohne explizite Typumwandlung an Methodenparameter übergeben).

      • Der Typ des linken Operanden darf nicht älter sein als Character, der Typ des rechten Operanden darf nicht älter sein als int, (Erweiterung/Einschränkung ist erlaubt byte <-> short, byte <-> char, short <-> char
        und nur Eingrenzung byte <- int, short <- int, char <- int, alle anderen Optionen erfordern eine explizite Typumwandlung)

    Ein zusätzliches Merkmal ganzzahliger „Wrapper-Klassen“, die durch Autoboxing-Konstanten im Bereich -128 +127 erstellt werden, besteht darin, dass sie von der JVM zwischengespeichert werden. Daher sind solche Wrapper mit denselben Werten Verweise auf ein Objekt.

  2. Warum wird es verwendet autoboxing?

    Ich zitiere den Vortrag:

    Wie Sie sich erinnern, gibt es in Java sowohl von der Klasse geerbte Typen Objectals auch primitive Typen. Aber wie sich herausstellte, können so praktische Dinge wie Sammlungen und Generika nur mit Typen funktionieren, die von geerbt wurden Object.

  3. Альтернативы autoboxing?

    Не нашел ответа, но запостил на StackOverFlow.

    Исходя из этой дискуссии, получается, что альтернатива autoboxing`у это использование примитивных типов, так Wie использовние autoboxing`a снижает производительность. Вывод: использовать autoboxing только там где это необходимо.

    Написана статья про Autoboxing: Autoboxing: Traps and Advantages

  4. Типы-обертки для примитивных типов mutable oder immutable?

    Immutable, так Wie примитивные ein Objektы тоже immutable. Wasбы работать Wie с Mutable типом есть класс MutableInteger, и.т.д.

  5. Как примитивные типы приводятся к непримитивным аналогам?

    На этот и последующий вопросы хорошо отвечает вот эта статья: Автоупаковка и распаковка в Java

    Это заключение из нее: автоупаковка является механизмом для скрытого преобразования примитивных типов данных в соответствующие классы-оболочки (ein Objektы). Компилятор использует метод valueOf() чтобы преобразовать примитивные типы в ein Objektы, а методы IntValue(), doubleValue() и т.д., чтобы получить примитивные типы из ein Objektа (то есть обратное преобразование). Автоупаковка преобразует логический тип boolean в Boolean, byte в Byte, char в Character, float в Float, int в Integer, long в Long, short в Short. Распаковка происходит в обратном направлении.

  6. Как непримитивные типы приводятся к примитивным?

    Выше ответил.

  7. Как сравниваются примитивные и непримитивные типы?

    В лекции это подробно рассматривается, но я нашел так скажем тоже самое, но другими словами.

    В Java есть два способа сравнивать ein Objektы на gleichtство, == и метод equals().

    == используется для примитивных типов. Для ein Objektов «==» это исключительно сравнение ссылок. Для остальных случаев нужно использовать метод equals(). Кроме того метод hashCode() служит (в теории) для той же цели. Хорошим тоном считается, если вы переопределoder equals() и hashCode(). После инициализации неких ein Objektов a и b должно выполняться правило:

    Если выражение a.equals(b) вернет true, то a.hashCode() должен быть gleicht b.hashCode().

  8. Всегда ли создается новый ein Objekt при операции autoboxing?

    Это в лекциях есть:

    Когда мы присваиваем переменной типа Integer Bedeutung типа int, при этом вызывается метод Integer.valueOf: функция valueOf не всегда создает новый ein Objekt типа Integer. Она кэширует значения от -128 до 127.

    Если передаваемое Bedeutung выходит за эти пределы, то новый ein Objekt создается, а если нет, то нет.

    Если мы пишем new Integer(), то гарантированно создается новый ein Objekt. Если мы вызываем Integer.valueOf(), явно oder при autoboxing, то этот метод может вернуть для нас Wie новый ein Objekt, так и отдать ein Objekt из кэша, если переданное число лежит в диапазоне от -128 до 127.

  9. Как работает кэширование при операции autoboxing?

    Ответил в вопросе выше, на всякий случай создал вопрос на StackOverFlow, но там отвечают тоже самое

  10. Для Wieих типов и/oder значений работает кэширование?

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

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