+2 امتیاز
قبل در برنامه نویسی توسط (505 امتیاز)
برچسب گذاری دوباره قبل توسط
فرق boxing و unboxing در جاوا چیست؟آیا این مفهوم در C# هم وحود دارد؟

1 پاسخ

+3 امتیاز
قبل توسط (1.1هزار امتیاز)
ویرایش شده قبل توسط

معادل هر داده اولیه در جاوا یک نوع ارجاعی با نام type-wrapper وجود دارد، برای مثال نوع داده اولیه int معادل نوع داده ارجاعی Integer را دارد. قبل از Java SE 5 برای مقدار دهی به یک متغییر از نوع Integer باید حتما یک شئ از کلاس Integer ایجاد می کردیم و همچنین برای مقدار دهی به یک متغییر از نوع int با استفاده از یک شئ Integer باید حتما از متد intValue کلاس Integer استفاده می کردیم، در حالت کلی کد زیر خطا بود:

        Integer integer = 10; // error 
        integer = new Integer(5); 
        int value = integer;  // error

اما بعد از Java SE 5 و با افزوده شدن قابلیت Autoboxing و Auto-Unboxing کد بالا باعث ایجاد خطا نمی شود. Autoboxing مقدار یک داده اولیه (مانند int) را به یک شئ از نوع type-wrapper متناظر آن نوع اولیه تبدیل می کند (برای int می شود Integer) و Auto-Unboxing نیز عکس این کار را انجام می دهد.

قبل توسط (1.1هزار امتیاز)
خیر.
در int x=5; چون هم 5 و هم x از نوع int هستند هیچگونه Boxing صورت نمی گیرد.
قبل توسط (0 امتیاز)
+1
مثلا وقتی که یک مقدار عدد صحیح به  شئ انتساب داده میشود کامپایلر عمل boxing را انجام می دهد و آن را در داخل یک شئ می ریزد. اما بعد که عمل جمع کردن عدد انجام می شود کامپایلر باید x را تبدیل به نوع اصلی int بکند تا بتواند با عدد (مثلا 10 ) جمع کند و در این حالت عمل unboxing انجام می شود.

Integer x = 5; // boxes int to an Integer object
      x =  x + 10;   // unboxes the Integer to a int

سوالات مشابه

0 امتیاز
1 پاسخ 36 بازدید
0 امتیاز
0 پاسخ 82 بازدید
+1 امتیاز
1 پاسخ 197 بازدید
سوال شده 2 سال قبل در برنامه نویسی توسط masoud shahhosseini_ (45 امتیاز)
+1 امتیاز
1 پاسخ 662 بازدید
+2 امتیاز
1 پاسخ 368 بازدید
0 امتیاز
0 پاسخ 113 بازدید
...