ما الفرق بين إنشاء String كمتغير وبين إنشاء String ككائن ؟

يمكن كتابة متغير من النوع String كالتالي

String name = "ahmed";

ويمكن كتابته بطريقة إنشاء كائن جديد كالتالي

String name = new String ("ahmed");

ما الفرق بين الطريقتين ؟

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

في الحالة الاولى يتم وضعه في pool واعادة استخدامه

مثلاً

String s1 = "Arabia"
String s2 = "Arabia"

كلا المتغيران يشيران الى نفس الكائن.

في الحالة الثانية يتم انشاء كائن جديد في كل مرة.

في الحالة الاولى يتم وضعه في pool واعادة استخدامه

حاولت البحث عن معنى pool وما فهمته أنه مسار من مسارات تنفيذ العمليات وما بداخل هذا المسار لا يتم تنفيذه في نفس الوقت بل يتم تنفيذ مهمة وراء مهمة

كلا المتغيران يشيران الى نفس الكائن.

في الحالة الثانية يتم انشاء كائن جديد في كل مرة.

لكن حسب معلوماتي أن String كلاس في اللغة وبالتالي في كل مرة نقوم بتعريف متغير جديد نقوم بإنشاء كائن جديد من String أي أنه في كلا الحالتين يتم إنشاء كائن. أم تقصد أن الطريقة الثانية تكون مؤقتة ويتم حذف الكائن بعد استخدامه مثلا ؟

حاولت البحث عن معنى pool وما فهمته أنه مسار من مسارات تنفيذ العمليات

ابحث عن java String pool, في حالتنا هو عبارة عن مستودع توضع فيه ال object بانتظار استخدمها.

لكن حسب معلوماتي أن String كلاس في اللغة وبالتالي في كل مرة نقوم بتعريف متغير جديد نقوم بإنشاء كائن جديد من String أي أنه > كلا الحالتين يتم إنشاء كائن. أم تقصد أن الطريقة الثانية تكون مؤقتة ويتم حذف الكائن بعد استخدامه مثلا ؟

ليس دائماً ننشئ كائن جديد, خصوصاً في الامور التي تحتاج سرعة, هناك مثلاً Database connection pool اي ان ال Object موجود وينتظر ان يتم استخدامه, وبعد الانتهاء منه يعود الى ال pool.

وهنا استخدام ال String بلطريقة الاولى ينشئ الكائن مرة واحدة فقط, ويوضع في ال pool لكل من يستخدمه بعد ذلك, اما الطريقة الثانية فيحذف في حال لم يعد هناك شيئ يشير اليه.

آسف على الرجوع إلى مشاركة قديمة لكن خطر في بالي سؤال الأن

أي الطريقتين يفضل استخدامها؟

نفس الشئ على ما اعتفد لانهم الاثنان object

لا أعتقد ﻷني قمت بكتابة شرط يتحقق ما إذا كان الاثنين متساويين أم لا ولم يتحقق بالرغم أني وضعت لهم نفس القيم. شاهد الكود

 String text1 = "text";
 String text2 = new String("text");
if (text1 == text2)
System.out.println("True");
 else
System.out.println("False");

لكن عند كتابة نفس الكود بدون الطريقة الثانية يتحقق الشرط

String text1 = "text";
String text2 = "text";
if (text1 == text2)
System.out.println("True");
else
System.out.println("False");