"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا لا يؤدي تسلسل السلاسل الفارغة في Java إلى ظهور NullPointerException؟

لماذا لا يؤدي تسلسل السلاسل الفارغة في Java إلى ظهور NullPointerException؟

تم النشر بتاريخ 2024-11-17
تصفح:801

Why Doesn\'t Concatenating Null Strings in Java Throw a NullPointerException?

ربط السلاسل الفارغة في Java

في Java، قد يبدو ربط السلاسل الفارغة أمرًا غير بديهي، مما يؤدي إلى توقع NullPointerException. ومع ذلك، تم تنفيذ هذه العملية بنجاح، مما أدى إلى ظهور سلسلة تحتوي على "فارغة" متبوعة بالسلسلة المتسلسلة.

لماذا يعمل هذا؟

وفقًا لمواصفات لغة جافا (JLS) 8، § 15.18.1، يتم تحويل المراجع الخالية بشكل صريح إلى السلسلة "فارغة" أثناء تسلسل السلسلة. يحدث هذا التحويل قبل أي استدعاءات للأسلوب، مما يضمن عدم طرح NullPointerExceptions.

كيف يعمل؟

يقوم مترجم Java بتحويل تعبير التسلسل إلى تسلسل مكافئ من استدعاءات الطريقة. في حالة s = s "hello"، يقوم المترجم بإنشاء كود مشابه لـ:

s = new StringBuilder(String.valueOf(s)).append("hello").toString();
s = new StringBuilder(String.valueOf(s)).append("hello").toString();
تتعامل طريقة الإلحاق الخاصة بـ StringBuilder مع الوسائط الفارغة بأمان. إذا كانت null هي الوسيطة الأولى، فسيتم استدعاء String.valueOf() لتحويلها إلى سلسلة.

بدلاً من ذلك، سيتم تحويل التعبير s = "hello" s إلى:

s = new StringBuilder("hello").append(s).toString();
s = new StringBuilder(String.valueOf(s)).append("hello").toString();
في هذه الحالة، تأخذ طريقة الإلحاق قيمة فارغة كوسيطة ثانية وتقوم بتفويضها إلى String.valueOf().

ملاحظة:

قد يقوم مترجمو Java بتحسين تسلسل السلاسل بشكل مختلف لتحسين الأداء، وذلك باستخدام تقنيات مثل تجميع StringBuilder. لذلك، قد يختلف الكود المكافئ الذي تم إنشاؤه اعتمادًا على المترجم المستخدم.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3