JavaRush /Java Blogu /Random-AZ /Səviyyə 29. Səviyyə mövzusu üzrə müsahibə suallarına cava...
DefNeo
Səviyyə

Səviyyə 29. Səviyyə mövzusu üzrə müsahibə suallarına cavablar

Qrupda dərc edilmişdir
Səviyyə 29. Səviyyə - 1 mövzusu üzrə müsahibə suallarına cavablar
  1. Nə baş verdi autoboxing?

    Avtoboksinqbyte sarğı siniflərinin (Bayt, Qısa, Xarakter, Tam, Uzun, Float, Cüt) obyektlərinin müvafiq orijinal primitiv növlərinin (müvafiq olaraq, , , , , , , , short) dəyərləri ilə qeyri -müəyyən şəkildə inisiallaşdırılması mexanizmidir char. sinif konstruktorunun açıq istifadəsi .intlongfloatdouble

    Avtoboksinq primitiv bilavasitə sarğı sinifinə təyin edildikdə (" =" operatorundan istifadə etməklə) və ya primitiv metodun parametrlərinə (məsələn, "sarğı sinfi") ötürüldükdə baş verir. Həm primitiv tipli dəyişənlər, həm də kompilyasiya vaxtı sabitləri (literallar və final-primitivlər) avtomatik olaraq “sarğı siniflərinə” yığıla bilər. Bu halda, orijinal primitiv tipli dəyişəni işə salmaq üçün hərflər sintaktik cəhətdən düzgün olmalıdır.

    İbtidai tipli dəyişənlərin avtobokslanması orijinal primitivin növünə - "sarğı sinfinin" növünə dəqiq uyğunluğu tələb edir. Məsələn, bir növ dəyişənini ilk olaraq açıq yayım etmədən avtomatik qutuya bytedaxil etməyə cəhd kompilyasiya xətasına səbəb olacaq.Shortbyte->short

    Primitiv tipli sabitlərin avtobokslanması daha geniş uyğunlaşma sərhədlərinə imkan verir. Bu halda kompilyator əvvəlcədən primitiv tiplərin gizli genişləndirilməsi/daraldılmasını həyata keçirə bilir. Transformasiya iki mərhələdə baş verir:

    1. orijinal ibtidai növün sarğı sinifinə uyğun olan primitiv tipə gizli genişlənməsi (daralması) (çevirmə üçün int->Byteəvvəlcə tərtibçi dolayısı ilə intdaralır byte)

    2. primitivin müvafiq “sarğı sinfi”nə avtomatik qablaşdırılması (tərtibçi avtomatik paketləyir byte->Byte). lakin bu halda iki əlavə məhdudiyyət var:

      • primitivin “sarımlayıcıya” təyin edilməsi yalnız “ =” operatorundan istifadə etməklə həyata keçirilə bilər (siz belə bir primitivi açıq tip tökmə olmadan metod parametrlərinə ötürə bilməzsiniz)

      • sol operandın növü -dən köhnə olmamalıdır Character, sağ operandın növü , -dən köhnə olmamalıdır int(genişləndirmə/daralmaya icazə verilir , byte <-> short, byte <-> charshort <-> char
        yalnız daralma byte <- int, short <- int, char <- int, bütün digər variantlar açıq tip tökmə tələb edir)

    -128 +127 diapazonunda avtoboksinq sabitləri tərəfindən yaradılan tam ədəd "sarğı sinifləri"nin əlavə xüsusiyyəti onların JVM tərəfindən yaddaşda saxlanmasıdır. Buna görə də, eyni dəyərləri olan bu cür sarğılar bir obyektə istinad olacaqdır.

  2. Niyə istifadə olunur autoboxing?

    Mühazirədən sitat gətirəcəyəm:

    Xatırladığınız kimi, Java-da həm sinifdən miras qalmış növlər Object, həm də primitiv tiplər var. Ancaq məlum oldu ki, kolleksiyalar və generiklər kimi rahat bir şey yalnız miras qalmış növlərlə işləyə bilər 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 значений работает кэширование?

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

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION