CodeGym /مدونة جافا /Random-AR /Autoboxing وUnboxing في جافا
John Squirrels
مستوى
San Francisco

Autoboxing وUnboxing في جافا

نشرت في المجموعة
في Java، إحدى ميزات البدائيات وأغلفتها هي autoboxing / unboxing. دعونا نحفر في هذا المفهوم. كما تعلمنا بالفعل، Java هي لغة موجهة للكائنات. وهذا يعني أن جميع البرامج المكتوبة بلغة Java مصنوعة من كائنات. البدائيون ليسوا كائنات. ولكن حتى مع ذلك، يمكن تعيين متغير المجمع قيمة بدائية. تسمى هذه العملية بالملاكمة التلقائية. وبالمثل، يمكن تعيين كائن مجمّع للمتغير البدائي. هذه العملية تسمى فتح العلبة. على سبيل المثال:
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 هما في الأساس نفس الشيء. هذا هو فتح علبته. يحدث شيء مشابه مع autoboxing في السطر 6: يتم تعيين القيمة الأولية (x * 123) بسهولة للكائن y . هذا مثال على التشغيل التلقائي. لهذا السبب يتضمن المصطلح كلمة "تلقائي": لأنه ليس عليك القيام بأي شيء خاص لتعيين العناصر الأولية لكائنات الغلاف المقابلة لها (والعكس صحيح). كل ذلك يحدث تلقائيا. مريحة، هاه؟ :) نرى مثالاً آخر على سهولة العلبة التلقائية / إلغاء العلبة عند العمل مع الطرق. وذلك لأن وسيطات الطريقة يتم أيضًا وضعها في علبة تلقائية وغير مُعبأة. على سبيل المثال، إذا كانت إحدى الطرق تأخذ كائنين عدديين كمدخلات، فيمكننا بسهولة تمرير 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));
   }
}
ستؤدي محاولة تمرير مصفوفة من العناصر الأولية إلى أسلوب يأخذ مصفوفة من الكائنات إلى حدوث خطأ في الترجمة. في الختام، دعونا نقارن بإيجاز بين البدائيات والمغلفات مرة أخرى.

البدائيون:

  • لديك مزايا الأداء
الأغلفة:
  • اسمح لنا بعدم انتهاك مبدأ "كل شيء هو كائن"، مما يعني أن الأرقام والحروف والقيم المنطقية لا تنتهك هذا المفهوم
  • توسيع إمكانيات العمل مع هذه القيم من خلال توفير الأساليب والمجالات الملائمة
  • تكون ضرورية عندما تعمل الطريقة مع الكائنات فقط
لتعزيز ما تعلمته، نقترح عليك مشاهدة درس فيديو من دورة Java الخاصة بنا
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION