JavaRush /جاوا بلاگ /Random-SD /ليول 29. ليول جي موضوع تي انٽرويو سوالن جا جواب
DefNeo
سطح

ليول 29. ليول جي موضوع تي انٽرويو سوالن جا جواب

گروپ ۾ شايع ٿيل
ليول 29. ليول جي موضوع تي انٽرويو سوالن جا جواب - 1
  1. ڇا ٿيو آهي autoboxing؟

    آٽو باڪسنگ هڪ ميکانيزم آهي جنهن ۾ لفافي طبقن جي شين (بائيٽ، شارٽ، ڪيڪٽر، انٽيجر، ڊگھي، فلوٽ، ڊبل) کي انهن جي لاڳاپيل اصل پرائمري قسمن (ترتيب سان، , , , , , , , , byte) shortکان سواءِ ڪلاس تعمير ڪندڙ جو واضح استعمال .charintlongfloatdouble

    آٽو باڪسنگ تڏهن ٿيندي آهي جڏهن هڪ پرائمٽيو سڌو سنئون ريپر ڪلاس کي لڳايو ويندو آهي (" =" آپريٽر استعمال ڪندي)، يا جڏهن هڪ پرائمٽيو ڪنهن طريقي جي پيرا ميٽرن ۾ داخل ڪيو ويندو آهي (جهڙوڪ "ريپر ڪلاس"). پرائمري قسم جا ٻئي متغير ۽ مرتب وقت جي مستقل (لفظي ۽ finalپرائميٽ) کي ”ريپر ڪلاسز“ ۾ آٽو پيڪ ڪري سگھجي ٿو. ان صورت ۾، لغوي کي لازمي طور تي صحيح طور تي صحيح هجڻ گهرجي ته جيئن اصل ابتدائي قسم جي متغير کي شروع ڪرڻ لاء.

    ابتدائي قسمن جي متغيرن جي آٽو باڪسنگ کي اصل پرائميٽ جي قسم جي صحيح ميلاپ جي ضرورت آهي - ”ريپر ڪلاس“ جو قسم. مثال طور، هڪ قسم جي متغير کي آٽو باڪس ڪرڻ جي ڪوشش ڪرڻ byte، Shortپهرين واضح ڪاسٽ ڪرڻ کان سواءِ، byte->shortتاليف جي غلطي جو سبب بڻجندي.

    آٽو باڪسنگ جي ابتدائي قسم جي مستقلن کي اجازت ڏئي ٿي وسيع ملندڙ حدن لاءِ. انهي صورت ۾، مرتب ڪندڙ اڳ ۾ ئي ابتدائي قسمن جي ضمني واڌ / تنگ ڪرڻ جي قابل هوندو آهي. تبديلي ٻن مرحلن ۾ ٿيندي آهي:

    1. ريپر ڪلاس سان واسطو رکندڙ پرائمري قسم جي اصلي پرائمٽيو قسم جي ضمني توسيع (تنگ) (تبديلي لاءِ int->Byte، پھريائين مرتب ڪندڙ کي واضح طور تي تنگ ڪري intٿو byte)

    2. مناسب ”ريپر ڪلاس“ (ڪمپائلر آٽوپيڪس) ۾ پرائميٽ جي آٽو پيڪنگ byte->Byte. بهرحال، هن معاملي ۾ ٻه اضافي پابنديون آهن:

      • هڪ ”ريپر“ کي پرائمٽيو جي تفويض صرف ” =” آپريٽر استعمال ڪندي ڪري سگهجي ٿي (توهان واضح قسم جي ڪاسٽنگ کان سواءِ اهڙي پرائميٽ کي طريقي جي پيرا ميٽرن کي پاس نٿا ڪري سگهو)

      • کاٻي آپرينڊ جو قسم، کان وڌيڪ پراڻو نه ھجڻ گھرجي Character، ساڄي اوپيرينڊ جو قسم، کان وڌيڪ پراڻو نه ھجڻ گھرجي ، int(وڌائڻ/بند ڪرڻ جي اجازت آھي ، ۽ صرف تنگ ڪرڻ ،،،، ٻين سڀني اختيارن لاءِ واضح قسم جي ڪاسٽنگ جي ضرورت آھي )byte <-> shortbyte <-> charshort <-> char
        byte <- intshort <- intchar <- int

    انٽيجر ”ريپر ڪلاسز“ جي هڪ اضافي خصوصيت جيڪا آٽو باڪسنگ ڪنسٽنٽن جي رينج -128 +127 ۾ ٺاهي وئي آهي اها اها آهي ته اهي JVM ذريعي ڪيش ٿيل آهن. تنهن ڪري، ساڳين قدرن سان اهڙا لفافي هڪ اعتراض جا حوالا هوندا.

  2. اهو ڇو استعمال ڪيو ويندو آهي autoboxing؟

    مان ليڪچر جو حوالو ڏيندس:

    جئين توهان کي ياد آهي، جاوا ٻئي قسم جا وراثت وارا آهن ڪلاس Object۽ پرائمري قسمن مان. پر، جيئن اهو نڪتو، مجموعو ۽ عام طور تي اهڙي آسان شيء صرف وراثت جي قسمن سان ڪم ڪري سگهي ٿي 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 значений работает кэширование?

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

تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION