الأنواع البدائية مقابل الأنواع البدائية الأنواع البدائية المعبأة
الاختلافات الرئيسية
الهوية مقابل الهوية قيمة:
البدائيون: ليس لديهم هوية؛ اثنان من البدائيين لهما نفس القيمة متساويان دائمًا.
المعبأة: هي أشياء ولها هوية؛ يمكن أن يكون لشيئين نفس القيمة ولكن هويتين مختلفتين.
القيم الخالية:
الأوليات: تحتوي دائمًا على قيمة افتراضية (على سبيل المثال 0 لـ int).
معبأة: قد تكون فارغة، مما قد يؤدي إلى استثناءات NullPointerException إذا لم يتم التعامل معها بشكل صحيح.
أداء:
البدائيات: أكثر كفاءة من حيث الزمان والمكان.
الحزم: تقديم النفقات العامة بسبب إنشاء كائنات إضافية.
المشكلات الشائعة عند خلط البدائيات والحزم
مثال إشكالي:
ComparatornaturalOrder = (i, j) -> (i المشكلة: المقارنة i == j تقارن المراجع وليس القيم.
سلوك غير صحيح: NaturalOrder.compare(new Integer(42), new Integer(42)) يُرجع 1 بدلاً من 0.حل:
استخدم أسلوب CompareTo أو أساليب الأداة المساعدة للفئة Integer.ComparatornaturalOrder = Integer::compare; أو تصحيح المقارن الأصلي:
ComparatornaturalOrder = (iBoxed, jBoxed) -> { int i = iBoxed; int j = jBoxed; return (i 2. Autounboxing و NullPointerException
عند استخدام الأنواع المجمعة التي يمكن أن تكون فارغة، قد يؤدي إلغاء التحديد التلقائي إلى ظهور استثناءات إذا كان الكائن فارغًا.مثال إشكالي:
Integer i = null; if (i == 42) { System.out.println("Inacreditável"); }المشكلة: i فارغة؛ عند المقارنة مع 42، يحدث إلغاء تلقائي للعلبة، مما يؤدي إلى NullPointerException.
الحل: استخدم الأنواع البدائية عندما يكون ذلك ممكنًا.int i = 0; if (i == 42) { System.out.println("Inacreditável"); }3. تدهور الأداء بسبب Autoboxing/Unboxing
يمكن أن يؤدي الاستخدام غير المقصود للأنواع الملتفة في العمليات المكثفة إلى تدهور الأداء بسبب التشغيل التلقائي وإنشاء كائن غير ضروري.مثال إشكالي:
Long sum = 0L; for (long i = 0; iالمشكلة: المبلغ طويل ومعبأ؛ في كل تكرار، يحدث التحويل التلقائي/إلغاء التغليف.
التأثير: كود أبطأ بكثير واستخدام مفرط للذاكرة.
حل:
استخدام الأنواع البدائية للمتغيرات المحلية في العمليات المكثفة.Long sum = 0L; for (long i = 0; iمتى تستخدم الأنواع المعبأة
- المجموعات: لا يمكنك استخدام الأنواع البدائية في المجموعات العامة (مثل القائمة).
- المعلمات العامة: الأنواع العامة لا تدعم الأنواع البدائية (مثل ThreadLocal).
- واجهات برمجة التطبيقات التي تتطلب كائنات: تتطلب واجهات برمجة تطبيقات معينة كائنات بدلاً من الأنواع البدائية.
الممارسات الجيدة
- تفضيل الأنواع البدائية: كلما أمكن، استخدم الأنواع البدائية من أجل البساطة والكفاءة.
- احذر من Autoboxing/Unboxing: Autoboxing يقلل من الإسهاب ولكن يمكن أن يؤدي إلى أخطاء طفيفة.
- تجنب المقارنات مع == في ملفوف: استخدم أساليب مثل يساوي () أو قارن القيم غير المغلفة.
- التحقق من وجود القيم الخالية: عند العمل مع الأنواع المجمعة، انتبه إلى أنها يمكن أن تكون فارغة وتتسبب في NullPointerException.
ملخص
الأنواع البدائية:
أبسط وأسرع.
لا يمكن أن تكون فارغة.
ليس لديهم هوية (قيمة فقط).الأنواع المعبأة:
مطلوب للاستخدام في المجموعات وواجهات برمجة التطبيقات العامة.
يمكن أن تكون فارغة.
لديهم هوية الكائن.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3