في Java ، يوجد اختلاف في الأداء بين استخدام عامل التشغيل "+" و StringBuilder؟


الاجابه 1:

في Java ، يوجد اختلاف في الأداء بين استخدام عامل التشغيل "+" و StringBuilder؟

على سطر واحد مثل هذه:

السلسلة string1 = "one" + "two" ؛
String string2 = جديد StringBuilder ("one"). إلحاق ("two"). toString ()؛

لا ينبغي أن يكون هناك اختلاف في الأداء. في الواقع ، في أنظمة جافا الإيكولوجية الحديثة ، يتم تحسين الأول إلى الثاني في وقت الترجمة. لرؤية هذا في العمل ، حاول الدخول إلى الأولى باستخدام مصحح الأخطاء المفضل لديك.

ومع ذلك ، إذا كانت السلاسل المتسلسلة على خطوط منفصلة أو ، على سبيل المثال ، في حلقة:

السلسلة string1 = "" ؛
StringBuilder sb = جديد StringBuilder ()؛

لـ (العدد الصحيح i = 0 ؛ i <5 ؛ i ++) {
  string1 = string1 + i.toString ()؛
  sb.append (i.toString ())؛
}

السلسلة string2 = sb.toString ()؛

ثم استخدام StringBuilder يكون أكثر "كفاءة" وأحيانًا يكون الطريقة المفضلة لبناء سلسلة أكثر تعقيدًا. حسب علمي ، لا يوجد حاليًا أي برنامج مترجم Java سيعمل على تحسين تكرار + ل StringBuilder.


الاجابه 2:

إجابة قصيرة: يمكن أن يكون هناك ، ولكن في معظم الوقت لا يستحق القلق. صالح رمز واضح على تحسين سابق لأوانه.

يمكن لـ JVM الحديثة تحسين تسلسل السلسلة باستخدام "+" وتحويلها إلى StringBuilder ، ولأنهم يستطيعون معرفة المدة التي ستستغرقها السلسلة ، فيمكنهم تخصيص الحجم الصحيح إلى StringBuilder في البداية. إذا قمت بإنشاء StringBuilder بنفسك باستخدام حجم الصفيف الافتراضي ، فقد يلزم توسيع صفيف char لاحقًا ، بما في ذلك نسخة صفيف ، لذلك قد يكون أبطأ بالفعل.

منذ Java 9 ، أصبح تسلسل السلسلة متسلسلاً أكثر ، مع تحديد استراتيجية في وقت التشغيل.

إذا كنت تضيف مرارًا وتكرارًا إلى سلسلة في حلقة ، فمن المحتمل أنك قد لا تخطئ في استخدام StringBuilder ، ولكن عليك تخصيص الحجم الصحيح مقدمًا إذا كان معروفًا. خارج الحلقات ، التمسك بـ "+" عندما تكون أكثر قابلية للقراءة ؛ واثق من أن JVM ، أو سيكون قريبًا ، أفضل من تحسينك.