JavaRush /جاوا بلاگ /Random-UR /لیول 29۔ لیول کے موضوع پر انٹرویو کے سوالات کے جوابات
DefNeo
سطح

لیول 29۔ لیول کے موضوع پر انٹرویو کے سوالات کے جوابات

گروپ میں شائع ہوا۔
لیول 29۔ لیول - 1 کے موضوع پر انٹرویو کے سوالات کے جوابات
  1. کیا ہوا autoboxing؟

    آٹو باکسنگbyte ریپر کلاسز (بائٹ، شارٹ، کریکٹر، انٹیجر، لانگ، فلوٹ، ڈبل) کی اشیاء کو ان کی متعلقہ اصل قدیم اقسام (بالترتیب، , , , , , , , short) کے بغیر واضح طور پر شروع کرنے کا ایک طریقہ کار ہے char۔ کلاس کنسٹرکٹر کا واضح استعمال ۔intlongfloatdouble

    آٹو باکسنگ اس وقت ہوتی ہے جب ایک پرائمیٹو کو براہ راست کسی ریپر کلاس کو تفویض کیا جاتا ہے (" =" آپریٹر کا استعمال کرتے ہوئے)، یا جب پرائمٹیو کو طریقہ کار کے پیرامیٹرز میں منتقل کیا جاتا ہے (جیسے "ریپر کلاس")۔ قدیم قسم کے متغیرات اور کمپائل ٹائم کنسٹنٹ (لفظی اور finalپرائمیٹوز) کو "ریپر کلاسز" میں آٹو پیک کیا جا سکتا ہے۔ اس صورت میں، اصل قدیم قسم کے متغیر کو شروع کرنے کے لیے لٹریلز کو نحوی طور پر درست ہونا چاہیے۔

    قدیم اقسام کے متغیرات کی آٹو باکسنگ کے لیے اصل پرائمیٹ کی قسم - "ریپر کلاس" کی قسم سے قطعی مماثلت کی ضرورت ہوتی ہے۔ مثال کے طور پر، پہلے واضح کاسٹ کیے بغیر، byteمیں ایک قسم کے متغیر کو آٹو باکس کرنے کی کوشش، تالیف کی خرابی کا سبب بنے گی۔Shortbyte->short

    قدیم قسم کے مستقلوں کی آٹو باکسنگ وسیع مماثل حدود کی اجازت دیتی ہے۔ اس صورت میں، مرتب کرنے والا ابتدائی اقسام کی مضمر توسیع/تنگ کرنے کے قابل ہوتا ہے۔ تبدیلی دو مراحل میں ہوتی ہے:

    1. ریپر کلاس سے مطابقت رکھنے والی قدیم قسم کی اصل قدیم قسم کی مضمر توسیع (تنگ) (تبدیلی کے لیے int->Byte، پہلے مرتب کرنے والا واضح طور intپر byte)

    2. مناسب "ریپر کلاس" (مرتب کرنے والا autopacks byte->Byte) میں ایک قدیم کی آٹو پیکنگ۔ تاہم، اس معاملے میں دو اضافی پابندیاں ہیں:

      • کسی "ریپر" کو پرائمیٹو کی تفویض صرف " =" آپریٹر کا استعمال کرتے ہوئے کی جا سکتی ہے (آپ واضح قسم کے کاسٹنگ کے بغیر اس طرح کے پرائمٹیو کو میتھڈ پیرامیٹر تک نہیں پاسکتے ہیں)

      • بائیں آپرینڈ کی قسم اس سے زیادہ پرانی نہیں ہونی چاہیے Character، دائیں آپرینڈ کی قسم , سے زیادہ پرانی نہیں ہونی چاہیے ( intتوسیع/کنسٹریکشن کی اجازت ہے byte <-> short، اور صرف تنگ کرنا ، , , دیگر تمام اختیارات کے لیے واضح قسم کاسٹنگ درکار ہے)byte <-> 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