CodeGym /وبلاگ جاوا /Random-FA /Autoboxing و Unboxing در جاوا
John Squirrels
مرحله
San Francisco

Autoboxing و Unboxing در جاوا

در گروه منتشر شد
در جاوا، یکی از ویژگی‌های اولیه و بسته‌بندی‌های آن‌ها، جعبه‌گشایی / جعبه‌گشایی است. بیایید به این مفهوم بپردازیم. همانطور که قبلاً آموختیم، جاوا یک زبان شی گرا است. یعنی تمام برنامه های نوشته شده در جاوا از اشیا ساخته شده اند. بدوی اشیا نیستند. اما حتی در این صورت، به یک متغیر wrapper می توان یک مقدار اولیه اختصاص داد. به این فرآیند اتوباکسینگ می گویند. به طور مشابه، یک متغیر ابتدایی را می توان یک شی wrapper اختصاص داد. به این فرآیند جعبه گشایی می گویند. مثلا:
public class Main {
   public static void main(String[] args) {
       int x = 7;
       Integer y = 111;
       x = y; // Unboxing
       y = x * 123; // Autoboxing
   }
}
در خط 5، y را که یک شی عدد صحیح است به x اولیه نسبت می دهیم . همانطور که می بینید، ما نیازی به انجام هیچ مرحله اضافی نداریم: کامپایلر می داند که int و Integer اساساً یک چیز هستند. این جعبه گشایی است. چیزی مشابه با خودکار در خط 6 اتفاق می افتد: مقدار اولیه (x * 123) به راحتی به شی y اختصاص داده می شود . این یک نمونه از اتوباکسینگ است. به همین دلیل است که این اصطلاح شامل کلمه "auto" می شود: زیرا برای اختصاص دادن موارد اولیه به اشیاء بسته بندی مربوطه آنها نیازی به انجام کار خاصی ندارید (و بالعکس). همه چیز به طور خودکار اتفاق می افتد. راحت، ها؟ :) مثال دیگری از راحتی اتوباکسینگ / جعبه گشایی هنگام کار با روش ها را می بینیم. این به این دلیل است که آرگومان های متد نیز به صورت خودکار و بدون جعبه هستند. به عنوان مثال، اگر یک متد دو شیء Integer را به عنوان ورودی دریافت کند، به راحتی می توانیم int s معمولی را به جای آن ارسال کنیم!
public class Main {
   public static void main(String[] args) {

       printNumber(7);// A standard int, not even an int variable
   }

   public static void printNumber(Integer i) {
       System.out.println("You entered the number " + i);
   }
}
خروجی:
You entered the number 7
در جهت دیگر نیز کار می کند:
public class Main {
   public static void main(String[] args) {

       printNumber(new Integer(632));
   }

   public static void printNumber(int i) {
       System.out.println("You entered the number " + i);
   }
}
نکته مهمی که باید به خاطر بسپارید این است: اتوباکس و جعبه گشایی برای آرایه ها کار نمی کند!
public class Main {
   public static void main(String[] args) {

       int[] i = {1,2,3,4,5};

       printArray(i);// Error, this won't compile!
   }

   public static void printArray(Integer[] arr) {
       System.out.println(Arrays.toString(arr));
   }
}
تلاش برای ارسال آرایه ای از موارد اولیه به روشی که آرایه ای از اشیاء را می گیرد منجر به خطای کامپایل می شود. در خاتمه، اجازه دهید یک بار دیگر به طور مختصر ابتدا و wrapper ها را با هم مقایسه کنیم.

اصول اولیه:

  • مزایای عملکردی داشته باشد
لفاف ها:
  • به ما اجازه دهید اصل "همه چیز یک شی است" را نقض نکنیم، به این معنی که اعداد، کاراکترها و مقادیر بولی این مفهوم را نقض نمی کنند.
  • با ارائه روش ها و زمینه های مناسب، امکانات کار با این مقادیر را گسترش دهید
  • زمانی ضروری است که یک روش فقط با اشیا کار کند
برای تقویت آموخته هایتان، پیشنهاد می کنیم یک درس ویدیویی از دوره جاوا ما تماشا کنید
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION