بيان المشغل الثلاثي مقابل بيان if للإرجاع الفارغ لـ int
في Java، يسمح المشغل الثلاثي (؟:) بتعيين null إلى متغير من النوع int، على الرغم من أن int هو نوع بيانات بدائي لا يدعم القيم الخالية. خذ بعين الاعتبار مقتطف التعليمات البرمجية التالي:
int temp() {
return true ? null : 0;
}
في هذا الكود، يقوم العامل الثلاثي بتعيين قيمة null إلى درجة الحرارة المتغيرة إذا كان الشرط الذي تم تقييمه صحيحًا، وإلا فإنه يعين 0. يسمح المترجم بهذا التعيين دون إصدار أي أخطاء. ومع ذلك، عند تنفيذ الطريقة، فإنها ستطرح NullPointerException في وقت التشغيل لأن null ليست قيمة صالحة لـ int.
على النقيض من العامل الثلاثي، فإن عبارة if لا تسمح بمثل هذه التعيينات الخالية لمتغيرات أنواع بدائية. على سبيل المثال:
int same() {
if (true) {
return null;
} else {
return 0;
}
}
سيؤدي هذا الرمز إلى إنشاء خطأ في وقت الترجمة مع الرسالة "أنواع غير متوافقة: لا يمكن تحويل null إلى int." يكمن سبب هذا التناقض في الطريقة التي يتعامل بها المترجم مع القيمة الخالية.
في حالة المشغل الثلاثي، يفسر المترجم القيمة الحرفية الخالية كمرجع فارغ إلى عدد صحيح، فئة المجمع لـ int. ويرجع ذلك إلى قواعد المترجم الخاصة بـ autoboxing وunboxing: عند التحويل من نوع بدائي إلى نوع كائن، يقوم Java Virtual Machine (JVM) تلقائيًا بتغليف القيمة الأولية في غلاف الكائن المقابل.
نظرًا لأن int عبارة عن النوع البدائي، سيحاول المترجم إلغاء القيمة الفارغة التي يتم إرجاعها بواسطة عامل التشغيل الثلاثي، مما يؤدي إلى NullPointerException.
في من ناحية أخرى، لا تقوم عبارة if بعملية إلغاء العلبة هذه، ويظل الحرف الخالي كمرجع فارغ للكائن. نظرًا لأن نوع الإرجاع لنفس الطريقة () هو int، فلا يمكن للمترجم تحويل المرجع الفارغ إلى int، ومن هنا حدث خطأ وقت الترجمة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3