Autoboxing وUnboxing
قواعد التحويل التلقائي
Autoboxing وUnboxing درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
التحويل التلقائي
التغليف التلقائي هو تحويل Java النوع البدائي تلقائيًا إلى كائن الصنف المغلِّف المقابل له. أما فك التغليف فهو العملية العكسية التي تحوّل الصنف المغلِّف إلى نوع بدائي.
تحدث هذه العملية بصمت، بحيث يمكنك المزج بين العالمين دون استدعاء أساليب تحويل يدويًا.
التغليف عمليًا
يؤدي إسناد قيمة int إلى متغير من نوع Integer إلى تشغيل التغليف التلقائي. ويُدرج المصرّف استدعاءً إلى Integer.valueOf نيابةً عنك.
public class Main {
public static void main(String[] args) {
int primitive = 42;
Integer boxed = primitive;
System.out.println(boxed);
}
}فك التغليف عمليًا
يؤدي إسناد قيمة Integer إلى متغير من نوع int إلى تشغيل فك التغليف. ويُدرج المصرّف استدعاءً إلى intValue خلف الكواليس.
public class Main {
public static void main(String[] args) {
Integer boxed = 99;
int primitive = boxed;
System.out.println(primitive);
}
}التغليف في المجموعات
أكثر موضع ترى فيه التغليف التلقائي شيوعًا هو عند إضافة أنواع بدائية إلى مجموعة. تكتب list.add(5)، فتغلّف Java القيمة 5 تلقائيًا داخل Integer.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
int first = nums.get(0);
System.out.println(first);
}
}العمليات الحسابية تفك التغليف
عند استخدام عوامل الرياضيات مع كائنات الأصناف المغلِّفة، تفك Java تغليفها أولًا إلى أنواع بدائية، ثم تجري العملية الحسابية، وبعد ذلك يمكنها إعادة تغليف النتيجة.
في المثال أدناه، تُجمع قيمتا Integer عبر فك تغليف كلتيهما.
public class Main {
public static void main(String[] args) {
Integer a = 10;
Integer b = 32;
int sum = a + b;
System.out.println(sum);
}
}المزج بين الأنواع البدائية والأصناف المغلِّفة
يمكنك المزج بحرية بين نوع بدائي وصنف مغلِّف داخل تعبير. تفك Java تغليف الصنف المغلِّف، بحيث يصبح الطرفان من الأنواع البدائية أثناء الحساب.
public class Main {
public static void main(String[] args) {
Integer wrapped = 7;
int raw = 3;
int product = wrapped * raw;
System.out.println(product);
}
}التغليف في استدعاءات الأساليب
ينطبق التغليف التلقائي أيضًا على وسيطات الأساليب. فالأسلوب الذي يتوقع Object أو صنفًا مغلِّفًا يمكنه استقبال نوع بدائي، وتغلّفه Java أثناء تمريره.
public class Main {
static void show(Object value) {
System.out.println("Got: " + value);
}
public static void main(String[] args) {
show(123);
show(true);
}
}الكلفة الخفية
التغليف التلقائي مريح، لكنه ليس مجانيًا. إذ ينشئ كل تغليف كائنًا، وقد تنشئ الحلقات المكثفة ملايين الكائنات قصيرة العمر.
وللحلقات العددية الحساسة للأداء، اعمل مباشرةً باستخدام الأنواع البدائية بدلًا من الأصناف المغلِّفة.
public class Main {
public static void main(String[] args) {
long total = 0;
for (int i = 0; i < 5; i++) {
total += i;
}
System.out.println(total);
}
}valueOf في مقابل new
يستخدم التغليف التلقائي Integer.valueOf، الذي يخزّن مؤقتًا القيم الصغيرة بين -128 و127. أما استدعاء new Integer(...) فينشئ دائمًا كائنًا جديدًا، وقد أصبح هذا الاستدعاء مهجورًا الآن.
فضّل ترك التغليف التلقائي يؤدي مهمته.
public class Main {
public static void main(String[] args) {
Integer cached = Integer.valueOf(50);
System.out.println(cached);
}
}التعبير الثلاثي والتغليف
هناك قاعدة دقيقة: في التعبير الثلاثي، إذا كان أحد الفرعين نوعًا بدائيًا والآخر صنفًا مغلِّفًا، فقد تفك Java تغليف كليهما إلى نوع بدائي مشترك.
يكون ذلك آمنًا في الغالب، لكن انتبه إلى أنه قد يؤدي إلى تحويلات لم تتوقعها.
public class Main {
public static void main(String[] args) {
boolean flag = true;
Integer result = flag ? 1 : 2;
System.out.println(result);
}
}متى يكون مفيدًا
وُجد التغليف التلقائي لجعل الشيفرة أكثر قابلية للقراءة عند المزج بين الأنواع البدائية والأنواع العامة والمجموعات. وعند استخدامه بحكمة، يزيل التعقيد غير الضروري. أما استخدامه بلا مبالاة في الحلقات الساخنة فيؤثر سلبًا في الأداء.
تحقق سريع
اختبر مدى استيعابك لقواعد التغليف التلقائي.
خلاصة
لقد تعلمت كيفية عمل التغليف التلقائي وفك التغليف:
- يحوّل التغليف التلقائي النوع البدائي إلى صنف مغلِّف باستخدام
valueOf - يعيد فك التغليف الصنف المغلِّف إلى نوع بدائي باستخدام أساليب مثل
intValue - يحدث ذلك في عمليات الإسناد والمجموعات والعمليات الحسابية واستدعاءات الأساليب
- هو مريح، لكنه ينشئ كائنات؛ لذا تجنّبه في الحلقات الساخنة
الأسئلة الشائعة
هل درس «Autoboxing وUnboxing» مجاني؟
نعم — نص درس «Autoboxing وUnboxing» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «Autoboxing وUnboxing»؟
قواعد التحويل التلقائي تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «Autoboxing وUnboxing»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الأنواع البدائية مقابل أنواع Wrapper
- Autoboxing وUnboxing
- Parsing وValueof
- مخاطر Autoboxing