JavaRush /Blog Java /Random-FR /Niveau 29. Réponses aux questions d'entretien sur le suje...
DefNeo
Niveau 36

Niveau 29. Réponses aux questions d'entretien sur le sujet du niveau

Publié dans le groupe Random-FR
Niveau 29. Réponses aux questions d'entretien sur le thème du niveau - 1
  1. Ce qui s'est passé autoboxing?

    L'autoboxing est un mécanisme permettant d'initialiser implicitement les objets des classes wrapper (Byte, Short, Character, Integer, Long, Float, Double) avec les valeurs de leurs types primitifs d'origine correspondants (respectivement, , , , , , , byte, short) char, intsans utilisation longexplicite du constructeur de classe.floatdouble

    L'autoboxing se produit lorsqu'une primitive est directement affectée à une classe wrapper (à l'aide de l' =opérateur " "), ou lorsqu'une primitive est passée dans les paramètres d'une méthode (telle qu'une "classe wrapper"). Les variables de types primitifs et les constantes de compilation (littéraux et final-primitives) peuvent être automatiquement regroupées dans des « classes wrapper ». Dans ce cas, les littéraux doivent être syntaxiquement corrects pour initialiser une variable du type primitif d'origine.

    Le boxing automatique des variables de types primitifs nécessite une correspondance exacte du type de la primitive d'origine - le type de la « classe wrapper ». Par exemple, tenter de placer automatiquement une variable de type bytedans Short, sans effectuer au préalable un transtypage explicite, byte->shortprovoquera une erreur de compilation.

    Le boxing automatique des constantes de type primitif permet des limites de correspondance plus larges. Dans ce cas, le compilateur est capable d’effectuer à l’avance une extension/rétrécissement implicite des types primitifs. La transformation se déroule en deux étapes :

    1. Expansion (rétrécissement) implicite du type primitif d'origine vers le type primitif correspondant à la classe wrapper (pour la conversion int->Byte, le compilateur se restreint d'abord implicitement intà byte)

    2. emballage automatique d'une primitive dans la « classe wrapper » appropriée (le compilateur autopacks byte->Byte). cependant, dans ce cas, il existe deux restrictions supplémentaires :

      • l'affectation d'une primitive à un « wrapper » ne peut être effectuée qu'à l'aide de l' =opérateur « » (vous ne pouvez pas transmettre une telle primitive aux paramètres de méthode sans conversion de type explicite)

      • le type de l'opérande de gauche ne doit pas être plus ancien que Character, le type de l'opérande de droite ne doit pas être plus ancien que int, (l'extension/constriction est autorisée byte <-> short, byte <-> char, short <-> char
        et seul le rétrécissement byte <- int, short <- int, char <- int, toutes les autres options nécessitent un transtypage explicite)

    Une fonctionnalité supplémentaire des "classes wrapper" entières créées par les constantes d'autoboxing dans la plage -128 +127 est qu'elles sont mises en cache par la JVM. Par conséquent, ces wrappers avec les mêmes valeurs seront des références à un objet.

  2. Pourquoi est-il utilisé autoboxing?

    Je citerai la conférence :

    Comme vous vous en souvenez, Java possède à la fois des types hérités de la classe Objectet des types primitifs. Mais il s'est avéré qu'une chose aussi pratique que les collections et les génériques ne peut fonctionner qu'avec des types hérités de Object.

  3. Alternatives autoboxing?

    Je n'ai pas trouvé de réponse, mais je l'ai publiée sur StackOverFlow .

    Sur la base de cette discussion, il semble qu'une alternative autoboxingà `a consiste à utiliser des types primitifs, car l'utilisation autoboxingde `a réduit les performances. Conclusion : à utiliser autoboxinguniquement lorsque cela est nécessaire.

    Un article a été écrit sur Autoboxing: Autoboxing : pièges et avantages

  4. Types wrapper pour les types primitifs mutableou immutable?

    Immutable, puisque les objets primitifs aussi immutable. Pour travailler avec Mutableun type, il existe une classe MutableInteger, etc.

  5. Comment les types primitifs sont-ils réduits à leurs homologues non primitifs ?

    Cet article répond bien à cette question et aux suivantes : Emballage et déballage automatiques en Java

    Voici la conclusion : l'autoboxing est un mécanisme de conversion cachée de types de données primitifs en classes wrapper (objets) correspondantes. Le compilateur utilise la méthode valueOf()pour convertir les types primitifs en objets, et les méthodes IntValue(), doubleValue()etc., pour obtenir les types primitifs de l'objet (c'est-à-dire la conversion inverse). L'autoboxing convertit le type booléen booleanen Boolean, byteen Byte, charen Character, floaten Float, inten Integer, longen Long, shorten Short. Le déballage s'effectue dans le sens inverse.

  6. Comment les types non primitifs sont-ils convertis en primitifs ?

    Répondu ci-dessus.

  7. Comment les types primitifs et non primitifs se comparent-ils ?

    La conférence en parle en détail, mais j’ai trouvé, disons la même chose, mais dans des termes différents.

    En Java, il existe deux façons de comparer des objets pour vérifier leur égalité, ==et le 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 значений работает кэширование?

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

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